SoulofSukuna commited on
Commit
2f158fd
1 Parent(s): 1d87caa

Application Install

Browse files
Files changed (18) hide show
  1. .github/workflows/codeql.yml +82 -0
  2. .gitignore +160 -0
  3. .nojekyll +0 -0
  4. .pre-commit-config.yaml +7 -0
  5. Dockerfile +21 -0
  6. LICENSE +19 -0
  7. README.md +53 -11
  8. SECURITY.md +21 -0
  9. banned_by_google.txt +769 -0
  10. database.py +91 -0
  11. functions.py +32 -0
  12. index.html +99 -0
  13. main.py +815 -0
  14. poetry.lock +752 -0
  15. requirements.txt +26 -0
  16. templates/config.py +7 -0
  17. templates/main.py +115 -0
  18. vercel.json +15 -0
.github/workflows/codeql.yml ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ "main" ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ "main" ]
20
+ schedule:
21
+ - cron: '36 13 * * 1'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ # Runner size impacts CodeQL analysis time. To learn more, please see:
27
+ # - https://gh.io/recommended-hardware-resources-for-running-codeql
28
+ # - https://gh.io/supported-runners-and-hardware-resources
29
+ # - https://gh.io/using-larger-runners
30
+ # Consider using larger runners for possible analysis time improvements.
31
+ runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
32
+ timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
33
+ permissions:
34
+ actions: read
35
+ contents: read
36
+ security-events: write
37
+
38
+ strategy:
39
+ fail-fast: false
40
+ matrix:
41
+ language: [ 'python' ]
42
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ]
43
+ # Use only 'java' to analyze code written in Java, Kotlin or both
44
+ # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
45
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
46
+
47
+ steps:
48
+ - name: Checkout repository
49
+ uses: actions/checkout@v3
50
+
51
+ # Initializes the CodeQL tools for scanning.
52
+ - name: Initialize CodeQL
53
+ uses: github/codeql-action/init@v2
54
+ with:
55
+ languages: ${{ matrix.language }}
56
+ # If you wish to specify custom queries, you can do so here or in a config file.
57
+ # By default, queries listed here will override any specified in a config file.
58
+ # Prefix the list here with "+" to use these queries and those in the config file.
59
+
60
+ # For more 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
61
+ # queries: security-extended,security-and-quality
62
+
63
+
64
+ # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
65
+ # If this step fails, then you should remove it and run the build manually (see below)
66
+ - name: Autobuild
67
+ uses: github/codeql-action/autobuild@v2
68
+
69
+ # ℹ️ Command-line programs to run using the OS shell.
70
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
71
+
72
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
73
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
74
+
75
+ # - run: |
76
+ # echo "Run, Build Application using script"
77
+ # ./location_of_script_within_repo/buildscript.sh
78
+
79
+ - name: Perform CodeQL Analysis
80
+ uses: github/codeql-action/analyze@v2
81
+ with:
82
+ category: "/language:${{matrix.language}}"
.gitignore ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # Pyre type checker
147
+ .pyre/
148
+
149
+ # pytype static type analyzer
150
+ .pytype/
151
+
152
+ # Cython debug symbols
153
+ cython_debug/
154
+
155
+ # PyCharm
156
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
159
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
+ #.idea/
.nojekyll ADDED
File without changes
.pre-commit-config.yaml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.5.0
4
+ hooks:
5
+ - id: check-yaml
6
+ - id: end-of-file-fixer
7
+ - id: trailing-whitespace
Dockerfile ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM rendyprojects/python:latest
2
+
3
+ WORKDIR /app/
4
+
5
+ RUN apt -qq update
6
+ RUN apt -qq install -y --no-install-recommends \
7
+ curl \
8
+ git \
9
+ gnupg2 \
10
+ unzip \
11
+ wget \
12
+ python3-pip \
13
+ ffmpeg \
14
+ neofetch
15
+
16
+ COPY . .
17
+
18
+ RUN pip3 install --upgrade pip setuptools
19
+ RUN pip3 install -r requirements.txt
20
+
21
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
LICENSE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2019-2023 The RyuzakiLib-API @xtdevs
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
README.md CHANGED
@@ -1,11 +1,53 @@
1
- ---
2
- title: UFoP API
3
- emoji: 🦀
4
- colorFrom: gray
5
- colorTo: pink
6
- sdk: docker
7
- pinned: false
8
- license: openrail
9
- ---
10
-
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## RyuzakiLib API
2
+
3
+ ## Disclaimer
4
+ ```
5
+ ⚠️ WARNING FOR YOU ️ ️⚠️
6
+ RyuzakiLib API is used to help your account activities on Telegram
7
+ We are not responsible for what you misuse in this repository
8
+ ! Be careful when using this repository!
9
+ If one of the members misuses this repository, we are forced to ban you
10
+ Never ever abuse this repository
11
+ ```
12
+
13
+ - Tutorial FastAPI
14
+ ```python
15
+ from fastapi import FastAPI
16
+ from RyuzakiLib.hackertools.chatgpt import RendyDevChat
17
+ from RyuzakiLib.hackertools.openai import OpenAiToken
18
+
19
+ app = FastAPI()
20
+
21
+ @app.get("/read")
22
+ def hello():
23
+ return {"message": "Hello World"}
24
+
25
+ if __name__ == "__main__":
26
+ uvicorn.run(app, host="0.0.0.0")
27
+ ```
28
+
29
+ ### How to secret via Hosting Cloud
30
+ ```.env
31
+ MONGO_URL=url
32
+ REVERSE_IMAGE_API=apikey
33
+ OCR_API_KEY=apikey
34
+ ONLY_DEVELOPER_API_KEYS=random
35
+ HUGGING_TOKEN=apikey
36
+ SOURCE_UNSPLASH_URL=url
37
+ SOURCE_OCR_URL=url
38
+ SOURCE_ALPHA_URL=url
39
+ SOURCE_WAIFU_URL=url
40
+ SOURCE_TIKTOK_WTF_URL=url
41
+ SOURCE_TIKTOK_TECH_URL=url
42
+ DEVELOPER_ID=0
43
+ ```
44
+ ### Troubleshoot
45
+ Sometimes errors occur, but we are here to help! This guide covers some of the most common issues we’ve seen and how you can resolve them. However, this guide isn’t meant to be a comprehensive collection of every 🤗 FastAPI issue. For more help with troubleshooting your issue, try:
46
+ * [Contact Support](https://t.me/xtdevs)
47
+
48
+ ### Contributing
49
+ * [Fork the project](https://github.com/TeamKillerX/RyuzakiLib) and send pull requests
50
+
51
+ ### Credits
52
+ * [![TeamKillerX-Devs](https://img.shields.io/static/v1?label=TeamkillerX&message=devs&color=critical)](https://t.me/xtdevs)
53
+ * [FastApi](https://github.com/CYCNO/Direct-Download-API)
SECURITY.md ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ Use this section to tell people about which versions of your project are
6
+ currently being supported with security updates.
7
+
8
+ | Version | Supported |
9
+ | ------- | ------------------ |
10
+ | 5.1.x | :white_check_mark: |
11
+ | 5.0.x | :x: |
12
+ | 4.0.x | :white_check_mark: |
13
+ | < 4.0 | :x: |
14
+
15
+ ## Reporting a Vulnerability
16
+
17
+ Use this section to tell people how to report a vulnerability.
18
+
19
+ Tell them where to go, how often they can expect to get an update on a
20
+ reported vulnerability, what to expect if the vulnerability is accepted or
21
+ declined, etc.
banned_by_google.txt ADDED
@@ -0,0 +1,769 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Free israel
2
+ Free Israel
3
+ Free isr4el
4
+ Free Isr4el
5
+ Free isr*el
6
+ Free Isr*el
7
+ Free isr**l
8
+ Free Isr**l
9
+ israel
10
+ Israel
11
+ israel.
12
+ Israel.
13
+ Isr*el
14
+ Isr**l
15
+ isr*el
16
+ isr**l
17
+ Isr4el
18
+ Isr4*l
19
+ isr4el
20
+ isr4*l
21
+ i.s.r.a.e.l.
22
+ I.s.r.a.e.l.
23
+ i.s.r.4.e.l.
24
+ I.s.r.4.e.l.
25
+ i.s.r.*.e.l.
26
+ I.s.r.*.e.l.
27
+ i.s.r.*.*.l
28
+ i.s.r.a.e.l
29
+ I.s.r.a.e.l
30
+ i.s.r.4.e.l
31
+ I.s.r.4.e.l
32
+ i.s.r.*.e.l
33
+ I.s.r.*.e.l
34
+ i.s.r.*.*.l
35
+ Free i.s.r.a.e.l
36
+ Free I.s.r.a.e.l
37
+ Free i.s.r.4.a.l
38
+ Free I.s.r.4.a.l
39
+ Free i.s.r.*.e.l
40
+ Free I.s.r.*.e.l
41
+ Free i.s.r.*.*.l
42
+ Free I.s.r.*.*.l
43
+ Support israel
44
+ Support Israel
45
+ Support Isr4el
46
+ Support isr*el
47
+ Support Isr*el
48
+ Support isr**l
49
+ Support Isr**l
50
+ bullshit
51
+ bull shit
52
+ bullshits
53
+ bullshitted
54
+ bullturds
55
+ bung
56
+ busty
57
+ butt
58
+ butt fuck
59
+ buttfuck
60
+ buttfucker
61
+ buttfucker
62
+ buttplug
63
+ c.0.c.k
64
+ c.o.c.k.
65
+ c.u.n.t
66
+ c0ck
67
+ c-0-c-k
68
+ c-u-n-t
69
+ cuntface
70
+ cunthunter
71
+ cuntlick
72
+ cuntlicker
73
+ stiffy
74
+ stoned
75
+ stroke
76
+ sucked
77
+ sucking
78
+ sumofabiatch
79
+ t1t
80
+ tampon
81
+ tard
82
+ tawdry
83
+ teabagging
84
+ teat
85
+ terd
86
+ teste
87
+ testee
88
+ testes
89
+ testicle
90
+ testis
91
+ thrust
92
+ thug
93
+ tinkle
94
+ tit
95
+ titfuck
96
+ titi
97
+ tits
98
+ tittiefucker
99
+ titties
100
+ titty
101
+ tittyfuck
102
+ tittyfucker
103
+ toke
104
+ toots
105
+ tramp
106
+ transsexual
107
+ trashy
108
+ tubgirl
109
+ turd
110
+ tush
111
+ twat
112
+ twats
113
+ ugly
114
+ undies
115
+ unwed
116
+ urinal
117
+ urine
118
+ uterus
119
+ uzi
120
+ vag
121
+ vagina
122
+ valium
123
+ viagra
124
+ virgin
125
+ vixen
126
+ vodka
127
+ vomit
128
+ voyeur
129
+ vulgar
130
+ vulva
131
+ wad
132
+ wang
133
+ wank
134
+ wanker
135
+ wazod
136
+ wedgie
137
+ weed
138
+ weenie
139
+ weewee
140
+ weiner
141
+ weirdo
142
+ wench
143
+ wetback
144
+ wh0re
145
+ wh0reface
146
+ whitey
147
+ whiz
148
+ whoralicious
149
+ whore
150
+ whorealicious
151
+ whored
152
+ whoreface
153
+ whorehopper
154
+ whorehouse
155
+ whores
156
+ whoring
157
+ wigger
158
+ womb
159
+ woody
160
+ wop
161
+ x-rated
162
+ xxx
163
+ yeasty
164
+ yobbo
165
+ zoophile
166
+ cyberfuc
167
+ cyberfuck
168
+ cyberfucked
169
+ cyberfucker
170
+ cyberfuckers
171
+ cyberfucking
172
+ towelhead
173
+ tramp
174
+ tranny
175
+ transsexual
176
+ trashy
177
+ tribadism
178
+ trumped
179
+ tub
180
+ tubgirl
181
+ turd
182
+ tush
183
+ tushy
184
+ tw4t
185
+ twat
186
+ twathead
187
+ twatlips
188
+ twats
189
+ twatty
190
+ twatwaffle
191
+ twink
192
+ twinkie
193
+ fingers with tongue
194
+ two girls one yobbo
195
+ zoophile
196
+ zoophilia
197
+ zubb
198
+ pussy
199
+ Pussy
200
+ P*ssy
201
+ Pussy.
202
+ pussy.
203
+ P.u.s.s.y
204
+ P.u.s.s.y.
205
+ p.u.s.s.y.
206
+ P.*.s.s.y.
207
+ p.*.s.s.y.
208
+ Kontol
209
+ k*nt*l.
210
+ K*nt*l.
211
+ kontol
212
+ kontole
213
+ k*nt*l
214
+ k0nt0l
215
+ K0nt0l
216
+ k0nt0l.
217
+ K0nt0l.
218
+ K.o.n.t.o.l
219
+ K.*.n.t.*l.
220
+ k.*.n.t.*l.
221
+ K.*.n.t.*l
222
+ k.*.n.t.*l
223
+ k.o.n.t.o.l.
224
+ K.o.n.t.o.l.
225
+ memek
226
+ m3m3k
227
+ M3m3k.
228
+ m3m3k.
229
+ M*m*k
230
+ Memek.
231
+ memek.
232
+ m*m*k.
233
+ m*m*k
234
+ M.e.m.e.k
235
+ M.e.m.e.k.
236
+ m.e.m.e.k.
237
+ M.*.m.*.k.
238
+ m.*.m.*.k.
239
+ M.*.m.*.k
240
+ m.*.m.*.k
241
+ anal
242
+ anus
243
+ arse
244
+ ass
245
+ ballsack
246
+ balls
247
+ bastard
248
+ bitch
249
+ biatch
250
+ bloody
251
+ blowjob
252
+ blow job
253
+ bollock
254
+ bollok
255
+ boner
256
+ boob
257
+ bugger
258
+ bum
259
+ butt
260
+ buttplug
261
+ clitoris
262
+ cock
263
+ coon
264
+ crap
265
+ cunt
266
+ dick
267
+ dildo
268
+ dyke
269
+ fag
270
+ feck
271
+ fellate
272
+ fellatio
273
+ felching
274
+ fuck
275
+ f u c k
276
+ fudgepacker
277
+ fudge packer
278
+ flange
279
+ Goddamn
280
+ God damn
281
+ hell
282
+ homo
283
+ jerk
284
+ jizz
285
+ knobend
286
+ knob end
287
+ labia
288
+ muff
289
+ nigger
290
+ nigga
291
+ penis
292
+ piss
293
+ poop
294
+ prick
295
+ pube
296
+ pussy
297
+ queer
298
+ scrotum
299
+ sex
300
+ shit
301
+ s hit
302
+ sh1t
303
+ slut
304
+ smegma
305
+ spunk
306
+ tit
307
+ tosser
308
+ turd
309
+ twat
310
+ vagina
311
+ wank
312
+ whore
313
+ ahole
314
+ anus
315
+ ash0le
316
+ ash0les
317
+ asholes
318
+ ass
319
+ Ass Monkey
320
+ Assface
321
+ assh0le
322
+ assh0lez
323
+ asshole
324
+ assholes
325
+ assholz
326
+ asswipe
327
+ azzhole
328
+ bassterds
329
+ bastard
330
+ bastards
331
+ bastardz
332
+ basterds
333
+ basterdz
334
+ Biatch
335
+ bitch
336
+ bitches
337
+ Blow Job
338
+ boffing
339
+ butthole
340
+ buttwipe
341
+ c0ck
342
+ c0cks
343
+ c0k
344
+ Carpet Muncher
345
+ cawk
346
+ cawks
347
+ Clit
348
+ cnts
349
+ cntz
350
+ cock
351
+ cockhead
352
+ cock-head
353
+ cocks
354
+ CockSucker
355
+ cock-sucker
356
+ crap
357
+ cum
358
+ cunt
359
+ cunts
360
+ cuntz
361
+ dick
362
+ dild0
363
+ dild0s
364
+ dildo
365
+ dildos
366
+ dilld0
367
+ dilld0s
368
+ dominatricks
369
+ dominatrics
370
+ dominatrix
371
+ dyke
372
+ enema
373
+ f u c k
374
+ f u c k e r
375
+ fag
376
+ fag1t
377
+ faget
378
+ fagg1t
379
+ faggit
380
+ faggot
381
+ fagit
382
+ fags
383
+ fagz
384
+ faig
385
+ faigs
386
+ fart
387
+ flipping the bird
388
+ fuck
389
+ fucker
390
+ fuckin
391
+ fucking
392
+ fucks
393
+ Fudge Packer
394
+ fuk
395
+ Fukah
396
+ Fuken
397
+ fuker
398
+ Fukin
399
+ Fukk
400
+ Fukkah
401
+ Fukken
402
+ Fukker
403
+ Fukkin
404
+ g00k
405
+ gay
406
+ gayboy
407
+ gaygirl
408
+ gays
409
+ gayz
410
+ God-damned
411
+ h00r
412
+ h0ar
413
+ h0re
414
+ hells
415
+ hoar
416
+ hoor
417
+ hoore
418
+ jackoff
419
+ jap
420
+ japs
421
+ jerk-off
422
+ jisim
423
+ jiss
424
+ jizm
425
+ jizz
426
+ knob
427
+ knobs
428
+ knobz
429
+ kunt
430
+ kunts
431
+ kuntz
432
+ Lesbian
433
+ Lezzian
434
+ Lipshits
435
+ Lipshitz
436
+ masochist
437
+ masokist
438
+ massterbait
439
+ masstrbait
440
+ masstrbate
441
+ masterbaiter
442
+ masterbate
443
+ masterbates
444
+ Motha Fucker
445
+ Motha Fuker
446
+ Motha Fukkah
447
+ Motha Fukker
448
+ Mother Fucker
449
+ Mother Fukah
450
+ Mother Fuker
451
+ Mother Fukkah
452
+ Mother Fukker
453
+ mother-fucker
454
+ Mutha Fucker
455
+ Mutha Fukah
456
+ Mutha Fuker
457
+ Mutha Fukkah
458
+ Mutha Fukker
459
+ n1gr
460
+ nastt
461
+ nigger;
462
+ nigur;
463
+ niiger;
464
+ niigr;
465
+ orafis
466
+ orgasim;
467
+ orgasm
468
+ orgasum
469
+ oriface
470
+ orifice
471
+ orifiss
472
+ packi
473
+ packie
474
+ packy
475
+ paki
476
+ pakie
477
+ paky
478
+ pecker
479
+ peeenus
480
+ peeenusss
481
+ peenus
482
+ peinus
483
+ pen1s
484
+ penas
485
+ penis
486
+ penis-breath
487
+ penus
488
+ penuus
489
+ Phuc
490
+ Phuck
491
+ Phuk
492
+ Phuker
493
+ Phukker
494
+ polac
495
+ polack
496
+ polak
497
+ Poonani
498
+ pr1c
499
+ pr1ck
500
+ pr1k
501
+ pusse
502
+ pussee
503
+ pussy
504
+ puuke
505
+ puuker
506
+ queer
507
+ queers
508
+ queerz
509
+ qweers
510
+ qweerz
511
+ qweir
512
+ recktum
513
+ rectum
514
+ retard
515
+ sadist
516
+ scank
517
+ schlong
518
+ screwing
519
+ semen
520
+ sex
521
+ sexy
522
+ Sh!t
523
+ sh1t
524
+ sh1ter
525
+ sh1ts
526
+ sh1tter
527
+ sh1tz
528
+ shit
529
+ shits
530
+ shitter
531
+ Shitty
532
+ Shity
533
+ shitz
534
+ Shyt
535
+ Shyte
536
+ Shytty
537
+ Shyty
538
+ skanck
539
+ skank
540
+ skankee
541
+ skankey
542
+ skanks
543
+ Skanky
544
+ slut
545
+ sluts
546
+ Slutty
547
+ slutz
548
+ son-of-a-bitch
549
+ tit
550
+ turd
551
+ va1jina
552
+ vag1na
553
+ vagiina
554
+ vagina
555
+ vaj1na
556
+ vajina
557
+ vullva
558
+ vulva
559
+ w0p
560
+ wh00r
561
+ wh0re
562
+ whore
563
+ xrated
564
+ xxx
565
+ b!+ch
566
+ bitch
567
+ blowjob
568
+ clit
569
+ arschloch
570
+ fuck
571
+ shit
572
+ ass
573
+ asshole
574
+ b!tch
575
+ b17ch
576
+ b1tch
577
+ bastard
578
+ bi+ch
579
+ boiolas
580
+ buceta
581
+ c0ck
582
+ cawk
583
+ chink
584
+ cipa
585
+ clits
586
+ cock
587
+ cum
588
+ cunt
589
+ dildo
590
+ dirsa
591
+ ejakulate
592
+ fatass
593
+ fcuk
594
+ fuk
595
+ fux0r
596
+ hoer
597
+ hore
598
+ jism
599
+ kawk
600
+ l3itch
601
+ l3i+ch
602
+ lesbian
603
+ masturbate
604
+ masterbat*
605
+ masterbat3
606
+ motherfucker
607
+ s.o.b.
608
+ mofo
609
+ nazi
610
+ nigga
611
+ nigger
612
+ nutsack
613
+ phuck
614
+ pimpis
615
+ pusse
616
+ pussy
617
+ scrotum
618
+ sh!t
619
+ shemale
620
+ shi+
621
+ sh!+
622
+ slut
623
+ smut
624
+ teets
625
+ tits
626
+ boobs
627
+ b00bs
628
+ teez
629
+ testical
630
+ testicle
631
+ titt
632
+ w00se
633
+ jackoff
634
+ wank
635
+ whoar
636
+ whore
637
+ *damn
638
+ *dyke
639
+ *fuck*
640
+ *shit*
641
+ @$$
642
+ amcik
643
+ andskota
644
+ arse*
645
+ assrammer
646
+ ayir
647
+ bi7ch
648
+ bitch*
649
+ bollock*
650
+ breasts
651
+ butt-pirate
652
+ cabron
653
+ cazzo
654
+ chraa
655
+ chuj
656
+ Cock*
657
+ cunt*
658
+ d4mn
659
+ daygo
660
+ dego
661
+ dick*
662
+ dike*
663
+ dupa
664
+ dziwka
665
+ ejackulate
666
+ Ekrem*
667
+ Ekto
668
+ enculer
669
+ faen
670
+ fag*
671
+ fanculo
672
+ fanny
673
+ feces
674
+ feg
675
+ Felcher
676
+ ficken
677
+ fitt*
678
+ Flikker
679
+ foreskin
680
+ Fotze
681
+ Fu(*
682
+ fuk*
683
+ futkretzn
684
+ gay
685
+ gook
686
+ guiena
687
+ h0r
688
+ h4x0r
689
+ hell
690
+ helvete
691
+ hoer*
692
+ honkey
693
+ Huevon
694
+ hui
695
+ injun
696
+ jizz
697
+ kanker*
698
+ kike
699
+ klootzak
700
+ kraut
701
+ knulle
702
+ kuk
703
+ kuksuger
704
+ Kurac
705
+ kurwa
706
+ kusi*
707
+ kyrpa*
708
+ lesbo
709
+ mamhoon
710
+ masturbat*
711
+ merd*
712
+ mibun
713
+ monkleigh
714
+ mouliewop
715
+ muie
716
+ mulkku
717
+ muschi
718
+ nazis
719
+ nepesaurio
720
+ nigger*
721
+ orospu
722
+ paska*
723
+ perse
724
+ picka
725
+ pierdol*
726
+ pillu*
727
+ pimmel
728
+ piss*
729
+ pizda
730
+ poontsee
731
+ poop
732
+ porn
733
+ p0rn
734
+ pr0n
735
+ preteen
736
+ pula
737
+ pule
738
+ puta
739
+ puto
740
+ qahbeh
741
+ queef*
742
+ rautenberg
743
+ schaffer
744
+ scheiss*
745
+ schlampe
746
+ schmuck
747
+ screw
748
+ sh!t*
749
+ sharmuta
750
+ sharmute
751
+ shipal
752
+ shiz
753
+ skribz
754
+ skurwysyn
755
+ sphencter
756
+ spic
757
+ spierdalaj
758
+ splooge
759
+ b00b*
760
+ testicle*
761
+ titt*
762
+ twat
763
+ vittu
764
+ wank*
765
+ wetback*
766
+ wichser
767
+ wop*
768
+ yed
769
+ zabourah
database.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 2020-2023 (c) Randy W @xtdevs, @xtsea
4
+ #
5
+ # from : https://github.com/TeamKillerX
6
+ # Channel : @RendyProjects
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Affero General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License
18
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
19
+
20
+ import os
21
+ from dotenv import load_dotenv
22
+ from pymongo import MongoClient
23
+
24
+ load_dotenv()
25
+ MONGO_URL = os.environ["MONGO_URL"]
26
+
27
+ client_mongo = MongoClient(MONGO_URL)
28
+ db = client_mongo["tiktokbot"]
29
+ collection = db["users"]
30
+
31
+ RAMDOM_STATUS = [
32
+ "civilian",
33
+ "wanted",
34
+ "undercover",
35
+ "rogue_agent",
36
+ "innocent",
37
+ "fugitive",
38
+ "covert_operator"
39
+ ]
40
+
41
+ def remove_sibyl_system_banned(user_id):
42
+ update_doc = {
43
+ "sibyl_ban": None,
44
+ "reason_sibyl": None,
45
+ "is_banned_sibly": None,
46
+ "date_joined_sib": None,
47
+ "sibyl_userid": None
48
+ }
49
+ return collection.update_one({"user_id": user_id}, {"$unset": update_doc}, upsert=True)
50
+
51
+ def new_sibyl_system_banned(user_id, name, reason, date_joined):
52
+ update_doc = {
53
+ "sibyl_ban": name,
54
+ "reason_sibyl": reason,
55
+ "is_banned_sibly": True,
56
+ "date_joined_sib": date_joined,
57
+ "sibyl_userid": user_id
58
+ }
59
+ return collection.update_one({"user_id": user_id}, {"$set": update_doc}, upsert=True)
60
+
61
+ def get_sibyl_system_banned(user_id):
62
+ user = collection.find_one({"user_id": user_id})
63
+ if user:
64
+ sibyl_name = user.get("sibyl_ban")
65
+ reason = user.get("reason_sibyl")
66
+ is_banned = user.get("is_banned_sibly")
67
+ date_joined = user.get("date_joined_sib")
68
+ sibyl_user_id = user.get("sibyl_userid")
69
+ return sibyl_name, reason, is_banned, date_joined, sibyl_user_id
70
+ else:
71
+ return None
72
+
73
+ def get_all_banned():
74
+ banned_users = []
75
+
76
+ users = collection.find({})
77
+
78
+ for user_id in users:
79
+ reason = user_id.get("reason_sibyl")
80
+ user_id = user_id.get("sibyl_userid")
81
+ banned_users.append({"user_id": user_id, "reason": reason})
82
+ return banned_users
83
+
84
+ def get_all_api_keys():
85
+ user = collection.find({})
86
+ api_keys = []
87
+ for x in user:
88
+ api_key = x.get("ryuzaki_api_key")
89
+ if api_key:
90
+ api_keys.append(api_key)
91
+ return api_keys
functions.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 2020-2023 (c) Randy W @xtdevs, @xtsea
4
+ #
5
+ # from : https://github.com/TeamKillerX
6
+ # Channel : @RendyProjects
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Affero General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License
18
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
19
+
20
+ import requests
21
+ import os
22
+ from dotenv import load_dotenv
23
+
24
+ load_dotenv()
25
+ HUGGING_TOKEN = os.environ["HUGGING_TOKEN"]
26
+ SOURCE_ALPHA_URL = os.environ["SOURCE_ALPHA_URL"]
27
+
28
+ def ryuzaki_ai_text(text):
29
+ API_URL = SOURCE_ALPHA_URL
30
+ headers = {"Authorization": f"Bearer {HUGGING_TOKEN}"}
31
+ response = requests.post(API_URL, headers=headers, json={"inputs": text})
32
+ return response.json()
index.html ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>API</title>
8
+ <style>
9
+ body {
10
+ margin: 0;
11
+ }
12
+ iframe {
13
+ position: fixed;
14
+ z-index: 10;
15
+ border: none;
16
+ top: 0;
17
+ right: 0;
18
+ bottom: 0;
19
+ left: 0;
20
+ width: 100%;
21
+ height: 100%;
22
+ }
23
+
24
+ ::-webkit-scrollbar {
25
+ width: 10px;
26
+ height: 10px;
27
+ display: none;
28
+ }
29
+ ::-webkit-scrollbar-button:start:decrement,
30
+ ::-webkit-scrollbar-button:end:increment {
31
+ height: 30px;
32
+ background-color: transparent;
33
+ }
34
+ ::-webkit-scrollbar-track-piece {
35
+ background-color: #3b3b3b;
36
+ -webkit-border-radius: 16px;
37
+ }
38
+ ::-webkit-scrollbar-thumb:vertical {
39
+ height: 50px;
40
+ background-color: #666;
41
+ border: 1px solid #eee;
42
+ -webkit-border-radius: 6px;
43
+ }
44
+ .loading-spinner {
45
+ display: flex;
46
+ justify-content: center;
47
+ align-items: center;
48
+ height: 100vh;
49
+ opacity: 1;
50
+ transition: opacity .8s ease-out;
51
+ }
52
+
53
+ .loading-spinner.hidden {
54
+ opacity: 0;
55
+ }
56
+
57
+ .loading-spinner>div {
58
+ width: 30px;
59
+ height: 30px;
60
+ background: linear-gradient(90deg, #2870EA 10.79%, #1B4AEF 87.08%);
61
+
62
+ border-radius: 100%;
63
+ display: inline-block;
64
+ animation: sk-bouncedelay 1.4s infinite ease-in-out both;
65
+ }
66
+
67
+ .loading-spinner .bounce1 {
68
+ animation-delay: -0.32s;
69
+ }
70
+
71
+ .loading-spinner .bounce2 {
72
+ animation-delay: -0.16s;
73
+ }
74
+
75
+ @keyframes sk-bouncedelay {
76
+
77
+ 0%,
78
+ 80%,
79
+ 100% {
80
+ transform: scale(0);
81
+ }
82
+
83
+ 40% {
84
+ transform: scale(1.0);
85
+ }
86
+ }
87
+ </style>
88
+ </head>
89
+
90
+ <body>
91
+ <iframe src="https://randydev-ryuzaki-api.hf.space/" frameborder="0" onload="document.querySelector('.loading-spinner').classList.add('hidden')"></iframe>
92
+ <div class="loading-spinner">
93
+ <div class="bounce1"></div>
94
+ <div class="bounce2"></div>
95
+ <div class="bounce3"></div>
96
+ </div>
97
+ </body>
98
+
99
+ </html>
main.py ADDED
@@ -0,0 +1,815 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 2020-2023 (c) Randy W @xtdevs, @xtsea
4
+ #
5
+ # from : https://github.com/TeamKillerX
6
+ # Channel : @RendyProjects
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Affero General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License
18
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
19
+
20
+ import requests
21
+ import json
22
+ import base64
23
+ import re
24
+ import uvicorn
25
+ import os
26
+ import shutil
27
+ import random
28
+ import g4f
29
+ import tempfile
30
+ import io
31
+ from io import BytesIO
32
+ from datetime import datetime as dt
33
+ from dotenv import load_dotenv
34
+ from bs4 import BeautifulSoup
35
+
36
+ from typing import Union
37
+ from typing_extensions import Annotated
38
+ from typing import Annotated, Union
39
+
40
+ from pydantic import BaseModel
41
+ from base64 import b64decode as kc
42
+ from base64 import b64decode
43
+ from random import choice
44
+ from gpytranslate import SyncTranslator
45
+ from httpx import AsyncClient
46
+ from telegraph import Telegraph, upload_file
47
+ from pathlib import Path
48
+ from serpapi import GoogleSearch
49
+
50
+ from fastapi import FastAPI, UploadFile, File
51
+ from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
52
+ from fastapi import Depends, FastAPI, HTTPException, status
53
+ from fastapi.responses import StreamingResponse
54
+ from fastapi import HTTPException
55
+ from fastapi import FastAPI, Request, Header
56
+ from fastapi import Body, Query
57
+ from fastapi.staticfiles import StaticFiles
58
+ from fastapi.templating import Jinja2Templates
59
+ from fastapi.responses import FileResponse
60
+
61
+ from RyuzakiLib.hackertools.chatgpt import RendyDevChat
62
+ from RyuzakiLib.hackertools.openai_api import OpenAiToken
63
+ from RyuzakiLib.mental import BadWordsList
64
+ from RyuzakiLib.spamwatch.clients import SibylBan
65
+
66
+ import logging
67
+ import database as db
68
+ import functions as code
69
+
70
+ logging.basicConfig(level=logging.ERROR)
71
+
72
+ # I DON'T KNOW LIKE THIS HACKER
73
+ load_dotenv()
74
+ REVERSE_IMAGE_API = os.environ["REVERSE_IMAGE_API"]
75
+ OCR_API_KEY = os.environ["OCR_API_KEY"]
76
+ ONLY_DEVELOPER_API_KEYS = os.environ["ONLY_DEVELOPER_API_KEYS"]
77
+ HUGGING_TOKEN = os.environ["HUGGING_TOKEN"]
78
+ SOURCE_UNSPLASH_URL = os.environ["SOURCE_UNSPLASH_URL"]
79
+ SOURCE_OCR_URL = os.environ["SOURCE_OCR_URL"]
80
+ SOURCE_ALPHA_URL = os.environ["SOURCE_ALPHA_URL"]
81
+ SOURCE_WAIFU_URL = "https://api.waifu.pics"
82
+ SOURCE_TIKTOK_WTF_URL = os.environ["SOURCE_TIKTOK_WTF_URL"]
83
+ SOURCE_TIKTOK_TECH_URL = os.environ["SOURCE_TIKTOK_TECH_URL"]
84
+ DEVELOPER_ID = os.environ["DEVELOPER_ID"]
85
+
86
+ description = """
87
+ ~ Developed written and powered by
88
+ - Ryuzaki Library: [Library Here](https://github.com/TeamKillerX/RyuzakiLib)
89
+ """
90
+
91
+ app = FastAPI(
92
+ title="UFoP-API",
93
+ description=description,
94
+ version="0.1.0",
95
+ terms_of_service="Use It Only For Personal Project Else I Need To Delete The Api",
96
+ contact={
97
+ "name": "🌀ʊʄ⊕ք🌀",
98
+ "url": "https://t.me/UFoPInfo",
99
+ },
100
+ docs_url="/"
101
+ )
102
+
103
+ def validate_api_key(api_key: str = Header(...)):
104
+ USERS_API_KEYS = db.get_all_api_keys()
105
+ if api_key not in USERS_API_KEYS:
106
+ raise HTTPException(status_code=401, detail="Invalid API key")
107
+
108
+ def validate_api_key_only_devs(api_key: str = Header(...)):
109
+ if api_key not in ONLY_DEVELOPER_API_KEYS:
110
+ raise HTTPException(status_code=401, detail="Invalid API key")
111
+
112
+
113
+ @app.get("/UFoP/getbanlist")
114
+ def sibyl_get_all_banlist():
115
+ banned_users = db.get_all_banned()
116
+ return {
117
+ "status": "True",
118
+ "randydev": {
119
+ "results": banned_users
120
+ }
121
+ }
122
+
123
+ @app.get("/UFoP/blacklist-words")
124
+ def blacklist_words():
125
+ try:
126
+ BLACKLIST_WORDS = BadWordsList()
127
+ results_all = BLACKLIST_WORDS.banned_by_google(file_txt="banned_by_google.txt", storage=True)
128
+ return {"status": "true", "results": results_all}
129
+ except Exception as e:
130
+ return {"status": "false", "message": f"Internal server error: {str(e)}"}
131
+
132
+ @app.delete("/UFoP/bandel")
133
+ def sibyl_system_delete(
134
+ user_id: int = Query(..., description="User ID in query parameter only developer"),
135
+ api_key: None = Depends(validate_api_key_only_devs)
136
+ ):
137
+ try:
138
+ _, _, _, _, sibyl_user_id = db.get_sibyl_system_banned(user_id)
139
+
140
+ if sibyl_user_id:
141
+ db.remove_sibyl_system_banned(user_id)
142
+ return {"status": "true", "message": f"Successfully removed {user_id} from the Sibyl ban list."}
143
+ else:
144
+ return {"status": "false", "message": "Not found user"}
145
+ except Exception as e:
146
+ return {"status": "false", "message": f"Internal server error: {str(e)}"}
147
+
148
+ @app.post("/UFoP/banner")
149
+ def sibyl_system_ban(
150
+ user_id: int = Query(..., description="User ID in query parameter"),
151
+ reason: str = Query(..., description="Reason in query parameter"),
152
+ api_key: None = Depends(validate_api_key_only_devs)
153
+ ):
154
+ if user_id == int(DEVELOPER_ID):
155
+ return {"status": "false", "message": "Only Developer"}
156
+
157
+ try:
158
+ date_joined = str(dt.now())
159
+ sibyl_ban = random.choice(db.RAMDOM_STATUS)
160
+ ban_data = db.get_sibyl_system_banned(user_id)
161
+
162
+ if ban_data is not None:
163
+ _, _, is_banned, _, sibyl_user_id = ban_data
164
+ return {"status": "false", "message": "User is already banned"}
165
+
166
+ db.new_sibyl_system_banned(user_id, sibyl_ban, reason, date_joined)
167
+
168
+ return {
169
+ "status": "true",
170
+ "randydev": {
171
+ "user_id": user_id,
172
+ "sibyl_name": sibyl_ban,
173
+ "reason": reason,
174
+ "date_joined": date_joined,
175
+ "message": f"Successfully banned {user_id} from the Sibyl ban list."
176
+ }
177
+ }
178
+ except Exception as e:
179
+ logging.error(f"Error in sibyl_system_ban: {e}")
180
+ return {"status": "false", "message": "Internal server error"}
181
+
182
+ @app.get("/UFoP/bans")
183
+ def sibyl_system(
184
+ user_id: int = Query(..., description="User ID in query parameter"),
185
+ api_key: None = Depends(validate_api_key) or Depends(validate_api_key_only_devs)
186
+ ):
187
+ result = db.get_sibyl_system_banned(user_id)
188
+ if result is not None:
189
+ sibyl_name, reason, is_banned, date_joined, sibyl_user_id = result
190
+ return {
191
+ "status": "true",
192
+ "randydev": {
193
+ "sibyl_name": sibyl_name,
194
+ "reason": reason,
195
+ "is_banned": is_banned,
196
+ "date_joined": date_joined,
197
+ "sibyl_user_id": sibyl_user_id
198
+ }
199
+ }
200
+ else:
201
+ return {"status": "false", "message": "Not Found User"}
202
+
203
+ @app.get("/ryuzaki/ai")
204
+ def ryuzaki_ai(
205
+ text: str = Query(..., description="text in query parameter"),
206
+ api_key: None = Depends(validate_api_key_only_devs)
207
+ ):
208
+ try:
209
+ response_data = code.ryuzaki_ai_text(text)
210
+
211
+ if isinstance(response_data, list) and len(response_data) > 0:
212
+ first_result = response_data[0]
213
+ if "generated_text" in first_result:
214
+ message = first_result["generated_text"]
215
+ return {
216
+ "status": "true",
217
+ "randydev": {
218
+ "ryuzaki_text": message
219
+ }
220
+ }
221
+
222
+ return {"status": "false", "message": "Invalid response format"}
223
+
224
+ except Exception as e:
225
+ return {"status": "false", "message": f"error: {e}"}
226
+
227
+ @app.get("/ryuzaki/unsplash")
228
+ async def get_image_unsplash(query: str, size: str="500x500"):
229
+ url = SOURCE_UNSPLASH_URL
230
+ image_url = f"{url}/?{query}/{size}"
231
+
232
+ try:
233
+ response = requests.get(image_url)
234
+ response.raise_for_status()
235
+ except requests.exceptions.RequestException as e:
236
+ raise HTTPException(status_code=500, detail=f"Error fetching image: {e}")
237
+
238
+ return StreamingResponse(BytesIO(response.content), media_type="image/jpeg")
239
+
240
+ @app.get("/ryuzaki/reverse")
241
+ def google_reverse(
242
+ engine: str="google_reverse_image",
243
+ image_url: str=None,
244
+ language: str="en",
245
+ google_lang: str="us",
246
+ api_key: None = Depends(validate_api_key)
247
+ ):
248
+ params = {
249
+ "api_key": REVERSE_IMAGE_API,
250
+ "engine": engine,
251
+ "image_url": image_url,
252
+ "hl": language,
253
+ "gl": google_lang
254
+ }
255
+ try:
256
+ search = GoogleSearch(params)
257
+ results = search.get_dict()
258
+ link = results["search_metadata"]["google_reverse_image_url"]
259
+ total_time_taken = results["search_metadata"]["total_time_taken"]
260
+ create_at = results["search_metadata"]["created_at"]
261
+ processed_at = results["search_metadata"]["processed_at"]
262
+ return {
263
+ "status": "true",
264
+ "randydev": {
265
+ "link": link,
266
+ "total_time_taken": total_time_taken,
267
+ "create_at": create_at,
268
+ "processed_at": processed_at
269
+ }
270
+ }
271
+ except Exception as e:
272
+ return {"status": "false", "message": f"Error {e}"}
273
+
274
+ @app.get("/ryuzaki/ocr")
275
+ def ocr_space_url(
276
+ url: str = Query(..., description="URL in query parameter"),
277
+ overlay: bool=False,
278
+ language: str = Query("eng", description="Language in query parameter"),
279
+ api_key: None = Depends(validate_api_key)
280
+ ):
281
+ payload = {
282
+ "url": url,
283
+ "isOverlayRequired": overlay,
284
+ "apikey": OCR_API_KEY,
285
+ "language": language
286
+ }
287
+ try:
288
+ response = requests.post(SOURCE_OCR_URL, data=payload)
289
+ response.raise_for_status()
290
+ test_url = response.content.decode()
291
+ except requests.exceptions.RequestException as e:
292
+ return f"Error: {str(e)}"
293
+ try:
294
+ parsed_response = json.loads(test_url)
295
+ if "ParsedResults" in parsed_response and len(parsed_response["ParsedResults"]) > 0:
296
+ return {
297
+ "status": "true",
298
+ "randydev":{
299
+ "text": parsed_response["ParsedResults"][0]["ParsedText"]
300
+ }
301
+ }
302
+ else:
303
+ return {"status": "false", "message": "Error response."}
304
+ except (json.JSONDecodeError, KeyError):
305
+ return "Error parsing the OCR response."
306
+
307
+ @app.get("/ryuzaki/chatgpt4")
308
+ def chatgpt4_support(
309
+ query: str=None,
310
+ api_key: None = Depends(validate_api_key)
311
+ ):
312
+ try:
313
+ response = g4f.ChatCompletion.create(
314
+ model=g4f.models.gpt_4,
315
+ messages=[{"role": "user", "content": query}],
316
+ )
317
+ return {
318
+ "status": "true",
319
+ "randydev":{
320
+ "message": response
321
+ }
322
+ }
323
+ except:
324
+ return {"status": "false", "message": "Error response."}
325
+
326
+ @app.post("/ryuzaki/chatgpt-model")
327
+ def chatgpt_model(
328
+ query: str=None,
329
+ model_id: int=1,
330
+ is_models: bool=True
331
+ ):
332
+ try:
333
+ response = RendyDevChat(query).get_response_model(model_id=model_id, is_models=is_models)
334
+ return {
335
+ "status": "true",
336
+ "randydev":{
337
+ "message": response
338
+ }
339
+ }
340
+ except:
341
+ return {"status": "false", "message": "Error response."}
342
+
343
+ async def get_data(username):
344
+ base_msg = ""
345
+ async with AsyncClient() as gpx:
346
+ req = (await gpx.get(f"https://api.github.com/users/{username}")).json()
347
+ try:
348
+ avatar = req["avatar_url"]
349
+ twitter = req['twitter_username']
350
+ base_msg += "**❆ Gitub Information ❆** \n\n"
351
+ base_msg += f"**Profile Url:** {req['html_url']} \n"
352
+ base_msg += f"**Name:** `{req['name']}` \n"
353
+ base_msg += f"**Username:** `{req['login']}` \n"
354
+ base_msg += f"**User ID:** `{req['id']}` \n"
355
+ base_msg += f"**Location:** `{req['location']}` \n"
356
+ base_msg += f"**Company:** `{req['company']}` \n"
357
+ base_msg += f"**Blog:** `{req['name']}` \n"
358
+ base_msg += f"**Twitter:** `{f'https://twitter.com/{twitter}' if twitter else 'None'}` \n"
359
+ base_msg += f"**Bio:** `{req['bio']}` \n"
360
+ base_msg += f"**Public Repos:** `{req['public_repos']}` \n"
361
+ base_msg += f"**Public Gists:** `{req['public_gists']}` \n"
362
+ base_msg += f"**Followers:** `{req['followers']}` \n"
363
+ base_msg += f"**Following:** `{req['following']}` \n"
364
+ base_msg += f"**Created At:** `{req['created_at']}` \n"
365
+ base_msg += f"**Update At:** `{req['updated_at']}` \n"
366
+ return [base_msg, avatar]
367
+ except Exception as e:
368
+ base_msg += f"**An error occured while parsing the data!** \n\n**Traceback:** \n `{e}` \n\n`Make sure that you've sent the command with the correct username!`"
369
+ return [base_msg, "https://telegra.ph//file/32f69c18190666ea96553.jpg"]
370
+
371
+ @app.get("/ryuzaki/github")
372
+ async def github(username: str=None):
373
+ try:
374
+ details = await get_data(username)
375
+ return {
376
+ "status": "true",
377
+ "randydev":{
378
+ "avatar": details[1],
379
+ "results": details[0]
380
+ }
381
+ }
382
+ except:
383
+ return {"status": "false", "message": "Error response."}
384
+
385
+ @app.get("/ryuzaki/webshot")
386
+ def webshot(
387
+ url: str=None,
388
+ quality: str="1920x1080",
389
+ type_mine: str="JPEG",
390
+ pixels: str="1024",
391
+ cast: str="Z100"
392
+ ):
393
+ try:
394
+ required_url = f"https://mini.s-shot.ru/{quality}/{type_mine}/{pixels}/{cast}/?{url}"
395
+ return {
396
+ "status": "true",
397
+ "randydev":{
398
+ "image_url": required_url
399
+ }
400
+ }
401
+ except:
402
+ return {"status": "false", "message": "Error response."}
403
+
404
+ @app.get("/ryuzaki/chatbot")
405
+ def chatbot(
406
+ query: str=None,
407
+ user_id: int=None,
408
+ bot_name: str=None,
409
+ bot_username: str=None
410
+ ):
411
+ api_url = b64decode("aHR0cHM6Ly9hcGkuc2Fmb25lLmRldi9jaGF0Ym90").decode("utf-8")
412
+ params = {
413
+ "query": query,
414
+ "user_id": user_id,
415
+ "bot_name": bot_name,
416
+ "bot_master": bot_username
417
+ }
418
+ x = requests.get(f"{api_url}", params=params)
419
+ if x.status_code != 200:
420
+ return "Error api request"
421
+ try:
422
+ y = x.json()
423
+ response = y["response"]
424
+ return {
425
+ "status": "true",
426
+ "randydev":{
427
+ "message": response
428
+ }
429
+ }
430
+ except:
431
+ return {"status": "false", "message": "Error response."}
432
+
433
+ @app.get("/ryuzaki/waifu")
434
+ def waifu_pics(
435
+ types: str="sfw",
436
+ category: str="neko"
437
+ ):
438
+ waifu_api = f"{SOURCE_WAIFU_URL}/{types}"
439
+ waifu_param = f"{waifu_api}/{category}"
440
+
441
+ response = requests.get(waifu_param)
442
+
443
+ if response.status_code != 200:
444
+ return "Sorry, there was an error processing your request. Please try again later"
445
+ data_waifu = response.json()
446
+ try:
447
+ waifu_image_url = data_waifu["url"]
448
+ except Exception as e:
449
+ return f"Error request {e}"
450
+ if waifu_image_url:
451
+ try:
452
+ return {
453
+ "status": "true",
454
+ "randydev":{
455
+ "image_url": waifu_image_url
456
+ }
457
+ }
458
+ except:
459
+ return {"status": "false", "message": "Error response"}
460
+ else:
461
+ return {"status": "false", "message": "Error response."}
462
+
463
+ @app.get("/ryuzaki/rayso")
464
+ def make_rayso(
465
+ code=None,
466
+ title: str="Ryuzaki Dev",
467
+ theme: str=None,
468
+ setlang: str="en",
469
+ auto_translate: bool=None,
470
+ ryuzaki_dark: bool=None
471
+ ):
472
+ trans = SyncTranslator()
473
+ api_url = b64decode("aHR0cHM6Ly9hcGkuc2Fmb25lLm1lL3JheXNv").decode("utf-8")
474
+ if auto_translate:
475
+ source = trans.detect(code)
476
+ translation = trans(code, sourcelang=source, targetlang=setlang)
477
+ code = translation.text
478
+ else:
479
+ code = code
480
+ if ryuzaki_dark:
481
+ x = requests.post(
482
+ f"{api_url}",
483
+ json={
484
+ "code": code,
485
+ "title": title,
486
+ "theme": theme,
487
+ "darkMode": True
488
+ }
489
+ )
490
+ if x.status_code != 200:
491
+ return "Error api Gay"
492
+ data = x.json()
493
+ try:
494
+ image_data = base64.b64decode(data["image"])
495
+ return {
496
+ "status": "true",
497
+ "data":{
498
+ "image": image_data
499
+ }
500
+ }
501
+ except:
502
+ return {"status": "false", "message": "Error response"}
503
+ else:
504
+ x = requests.post(
505
+ f"{api_url}",
506
+ json={
507
+ "code": code,
508
+ "title": title,
509
+ "theme": theme,
510
+ "darkMode": False
511
+ }
512
+ )
513
+ if x.status_code != 200:
514
+ return "Error api Gay"
515
+ data = x.json()
516
+ try:
517
+ image_data = base64.b64decode(data["image"])
518
+ return {
519
+ "status": "true",
520
+ "data":{
521
+ "image": image_data
522
+ }
523
+ }
524
+ except:
525
+ return {"status": "false", "message": "Error response"}
526
+
527
+ @app.get("/ryuzaki/ipcheck")
528
+ def whois_ip_address(ip_address: str=None):
529
+ apikey = kc("M0QwN0UyRUFBRjU1OTQwQUY0NDczNEMzRjJBQzdDMUE=").decode("utf-8")
530
+ location_link = "https"
531
+ location_api = "api.ip2location.io"
532
+ location_key = f"key={apikey}"
533
+ location_search = f"ip={ip_address}"
534
+ location_param = (
535
+ f"{location_link}://{location_api}/?{location_key}&{location_search}"
536
+ )
537
+ response = requests.get(location_param)
538
+ if response.status_code != 200:
539
+ return "Sorry, there was an error processing your request. Please try again later"
540
+ data_location = response.json()
541
+ try:
542
+ location_ip = data_location["ip"]
543
+ location_code = data_location["country_code"]
544
+ location_name = data_location["country_name"]
545
+ location_region = data_location["region_name"]
546
+ location_city = data_location["city_name"]
547
+ location_zip = data_location["zip_code"]
548
+ location_zone = data_location["time_zone"]
549
+ location_card = data_location["as"]
550
+ except Exception as e:
551
+ return f"error {e}"
552
+ if (
553
+ location_ip
554
+ and location_code
555
+ and location_name
556
+ and location_region
557
+ and location_city
558
+ and location_zip
559
+ and location_zone
560
+ and location_card
561
+ ):
562
+ return {
563
+ "ip_address": location_ip,
564
+ "country_code": location_code,
565
+ "region_name": location_region,
566
+ "city_name": location_city,
567
+ "zip_code": location_zip,
568
+ "time_zone": location_zone,
569
+ "as": location_card
570
+ }
571
+ else:
572
+ return {"status": "false", "message": "Invalid ip address"}
573
+
574
+ @app.get("/ryuzaki/tiktok_douyin")
575
+ def tiktok_douyin(tiktok_url: str=None):
576
+ response = requests.get(f"{SOURCE_TIKTOK_WTF_URL}={tiktok_url}")
577
+ if response.status_code != 200:
578
+ return "Error request:"
579
+ try:
580
+ download_video = response.json()["aweme_list"][0]["video"]["play_addr"]["url_list"][0]
581
+ download_audio = response.json()["aweme_list"][0]["music"]["play_url"]["url_list"][0]
582
+ description = response.json()["aweme_list"][0]["desc"]
583
+ author = response.json()["aweme_list"][0]["author"]["nickname"]
584
+ request = response.json()["aweme_list"][0]["author"]["signature"]
585
+ return {
586
+ "status": "true",
587
+ "randydev": {
588
+ "video_url": download_video,
589
+ "music_url": download_audio,
590
+ "description": description,
591
+ "author": author,
592
+ "request": request
593
+ }
594
+ }
595
+ except:
596
+ return {"status": "false", "message": "Error request"}
597
+
598
+ @app.get("/ryuzaki/tiktok")
599
+ def tiktok_downloader(tiktok_url: Union[str, None] = None, only_video: bool=None):
600
+ api_devs = SOURCE_TIKTOK_TECH_URL
601
+ parameter = f"tiktok?url={tiktok_url}"
602
+ api_url = f"{api_devs}/{parameter}"
603
+ response = requests.get(api_url)
604
+
605
+ if response.status_code != 200:
606
+ return "Error: Unable to fetch data from the TikTok API"
607
+ try:
608
+ results = response.json()
609
+ caption = results.get("result", {}).get("desc", "")
610
+ if only_video:
611
+ video_url = results.get("result", {}).get("withoutWaterMarkVideo", "")
612
+ if video_url:
613
+ return {
614
+ "download_url": video_url,
615
+ "caption": caption
616
+ }
617
+ else:
618
+ music_mp3 = results.get("result", {}).get("music", "")
619
+ if music_mp3:
620
+ return {
621
+ "music_url": music_mp3,
622
+ "caption": caption
623
+ }
624
+ return "Error: TikTok data not found or unsupported format"
625
+ except:
626
+ return {"status": "false", "message": "Invalid Link"}
627
+
628
+ @app.get("/ryuzaki/mediafire")
629
+ def mediafire(link: Union[str, None] = None):
630
+ try:
631
+ down_link = str(link)
632
+ mid = down_link.split('/', 5)
633
+ if mid[3] == "view":
634
+ mid[3] = "file"
635
+ down_link = '/'.join(mid)
636
+ print(down_link)
637
+ r = requests.get(down_link)
638
+ soup = BeautifulSoup(r.content, "html.parser")
639
+ a_href = soup.find("a", {"class": "input popsok"}).get("href")
640
+ a = str(a_href)
641
+ id = link.split('/', 5)[4]
642
+ a_byte = soup.find("a", {"class": "input popsok"}).get_text()
643
+ a_name = soup.find("div", {"class": "dl-btn-label"}).get_text()
644
+ details = soup.find("ul", {"class": "details"})
645
+ li_items = details.find_all('li')[1]
646
+ some = li_items.find_all("span")[0].get_text().split()
647
+ dat = list(some)
648
+ down = a_byte.replace(" ", "").strip()
649
+ time = dat[1]
650
+ date = dat[0]
651
+ byte = down.split("(", 1)[1].split(")", 1)[0]
652
+ name = a_name.replace(" ", "").strip()
653
+ return {
654
+ "status": "true",
655
+ "data": {
656
+ "file": {
657
+ "url": {
658
+ 'directDownload': a,
659
+ "original": link,
660
+ },
661
+ "metadata": {
662
+ "id": id,
663
+ "name": name,
664
+ "size": {
665
+ "readable": byte
666
+ },
667
+ "DateAndTime": {
668
+ "time": time,
669
+ "date": date
670
+ }
671
+ }
672
+ }
673
+ }
674
+ }
675
+
676
+ except:
677
+ return "{'status': 'false', 'message': 'Invalid Link'}"
678
+
679
+
680
+ @app.get("/ryuzaki/gdrive")
681
+ def gdrive(link: Union[str, None] = None):
682
+ try:
683
+ down = link.split('/', 6)
684
+ url = f'https://drive.google.com/uc?export=download&id={down[5]}'
685
+ session = requests.Session()
686
+
687
+ response = session.get(url, stream=True)
688
+ headers = response.headers
689
+ content_disp = headers.get('content-disposition')
690
+ filename = None
691
+ if content_disp:
692
+ match = re.search(r'filename="(.+)"', content_disp)
693
+ if match:
694
+ filename = match.group(1)
695
+
696
+ content_length = headers.get('content-length')
697
+ last_modified = headers.get('last-modified')
698
+ content_type = headers.get('content-type')
699
+
700
+ return {
701
+ "status": "true",
702
+ "data": {
703
+ "file": {
704
+ "url": {
705
+ 'directDownload': url,
706
+ "original": link,
707
+ },
708
+ "metadata": {
709
+ "id":
710
+ down[5],
711
+ "name":
712
+ filename if filename else 'No filename provided by the server.',
713
+ "size": {
714
+ "readable":
715
+ f'{round(int(content_length) / (1024 * 1024), 2)} MB' if
716
+ content_length else 'No content length provided by the server.',
717
+ "type":
718
+ content_type
719
+ if content_type else 'No content type provided by the server.'
720
+ },
721
+ "DateAndTime":
722
+ last_modified if last_modified else
723
+ 'No last modified date provided by the server.',
724
+ }
725
+ }
726
+ }
727
+ }
728
+
729
+ except:
730
+ return "{'status': 'false', 'message': 'Invalid Link'}"
731
+
732
+ @app.get("/ryuzaki/anonfiles")
733
+ def anonfiles(link: Union[str, None] = None):
734
+ try:
735
+ r = requests.get(link)
736
+ soup = BeautifulSoup(r.content, "html.parser")
737
+ a_href = soup.find("a", {"id": "download-url"}).get("href")
738
+ a = str(a_href)
739
+ id = link.split('/', 4)[3]
740
+ jsondata = requests.get(
741
+ f'https://api.anonfiles.com/v2/file/{id}/info').json()
742
+ jsondata['data']['file']['url']['directDownload'] = a
743
+ del jsondata['data']['file']['url']['full']
744
+
745
+ return jsondata
746
+ except:
747
+ return "{'status': 'false', 'message': 'Invalid Link'}"
748
+
749
+ @app.get("/ryuzaki/filechan")
750
+ def filechan(link: Union[str, None] = None):
751
+ try:
752
+ r = requests.get(link)
753
+ soup = BeautifulSoup(r.content, "html.parser")
754
+ a_href = soup.find("a", {"id": "download-url"}).get("href")
755
+ a = str(a_href)
756
+ id = link.split('/', 4)[3]
757
+ jsondata = requests.get(
758
+ f'https://api.filechan.org/v2/file/{id}/info').json()
759
+ jsondata['data']['file']['url']['directDownload'] = a
760
+ del jsondata['data']['file']['url']['full']
761
+
762
+ return jsondata
763
+ except:
764
+ return "{'status': 'false', 'message': 'Invalid Link'}"
765
+
766
+ @app.get("/ryuzaki/letsupload")
767
+ def letsupload(link: Union[str, None] = None):
768
+ try:
769
+ r = requests.get(link)
770
+ soup = BeautifulSoup(r.content, "html.parser")
771
+ a_href = soup.find("a", {"id": "download-url"}).get("href")
772
+ a = str(a_href)
773
+ id = link.split('/', 4)[3]
774
+ jsondata = requests.get(
775
+ f'https://api.letsupload.cc/v2/file/{id}/info').json()
776
+ jsondata['data']['file']['url']['directDownload'] = a
777
+ del jsondata['data']['file']['url']['full']
778
+
779
+ return jsondata
780
+ except:
781
+ return "{'status': 'false', 'message': 'Invalid Link'}"
782
+
783
+ @app.get("/ryuzaki/megaupload")
784
+ def megaupload(link: Union[str, None] = None):
785
+ try:
786
+ r = requests.get(link)
787
+ soup = BeautifulSoup(r.content, "html.parser")
788
+ a_href = soup.find("a", {"id": "download-url"}).get("href")
789
+ a = str(a_href)
790
+ id = link.split('/', 4)[3]
791
+ jsondata = requests.get(
792
+ f'https://api.megaupload.nz/v2/file/{id}/info').json()
793
+ jsondata['data']['file']['url']['directDownload'] = a
794
+ del jsondata['data']['file']['url']['full']
795
+
796
+ return jsondata
797
+ except:
798
+ return "{'status': 'false', 'message': 'Invalid Link'}"
799
+
800
+ @app.get("/ryuzaki/myfile")
801
+ def myfile(link: Union[str, None] = None):
802
+ try:
803
+ r = requests.get(link)
804
+ soup = BeautifulSoup(r.content, "html.parser")
805
+ a_href = soup.find("a", {"id": "download-url"}).get("href")
806
+ a = str(a_href)
807
+ id = link.split('/', 4)[3]
808
+ jsondata = requests.get(
809
+ f'https://api.myfile.is/v2/file/{id}/info').json()
810
+ jsondata['data']['file']['url']['directDownload'] = a
811
+ del jsondata['data']['file']['url']['full']
812
+
813
+ return jsondata
814
+ except:
815
+ return "{'status': 'false', 'message': 'Invalid Link'}"
poetry.lock ADDED
@@ -0,0 +1,752 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
2
+
3
+ [[package]]
4
+ name = "annotated-types"
5
+ version = "0.6.0"
6
+ description = "Reusable constraint types to use with typing.Annotated"
7
+ optional = false
8
+ python-versions = ">=3.8"
9
+ files = [
10
+ {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
11
+ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
12
+ ]
13
+
14
+ [[package]]
15
+ name = "anyio"
16
+ version = "3.7.1"
17
+ description = "High level compatibility layer for multiple asynchronous event loop implementations"
18
+ optional = false
19
+ python-versions = ">=3.7"
20
+ files = [
21
+ {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"},
22
+ {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"},
23
+ ]
24
+
25
+ [package.dependencies]
26
+ exceptiongroup = {version = "*", markers = "python_version < \"3.11\""}
27
+ idna = ">=2.8"
28
+ sniffio = ">=1.1"
29
+
30
+ [package.extras]
31
+ doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"]
32
+ test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
33
+ trio = ["trio (<0.22)"]
34
+
35
+ [[package]]
36
+ name = "beautifulsoup4"
37
+ version = "4.12.2"
38
+ description = "Screen-scraping library"
39
+ optional = false
40
+ python-versions = ">=3.6.0"
41
+ files = [
42
+ {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"},
43
+ {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"},
44
+ ]
45
+
46
+ [package.dependencies]
47
+ soupsieve = ">1.2"
48
+
49
+ [package.extras]
50
+ html5lib = ["html5lib"]
51
+ lxml = ["lxml"]
52
+
53
+ [[package]]
54
+ name = "beautifultable"
55
+ version = "1.1.0"
56
+ description = "Print text tables for terminals"
57
+ optional = false
58
+ python-versions = "*"
59
+ files = [
60
+ {file = "beautifultable-1.1.0-py2.py3-none-any.whl", hash = "sha256:b34053a581976c4c23064bb0e918a7f6f22273cf196c787946db323a6a2b7d84"},
61
+ {file = "beautifultable-1.1.0.tar.gz", hash = "sha256:040bc987444965678f4ffdfa2f17ac357f1a13e5875b161c9a1899b375319d17"},
62
+ ]
63
+
64
+ [package.dependencies]
65
+ wcwidth = "*"
66
+
67
+ [package.extras]
68
+ all = ["pandas"]
69
+ dev = ["pandas"]
70
+
71
+ [[package]]
72
+ name = "bs4"
73
+ version = "0.0.1"
74
+ description = "Dummy package for Beautiful Soup"
75
+ optional = false
76
+ python-versions = "*"
77
+ files = [
78
+ {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"},
79
+ ]
80
+
81
+ [package.dependencies]
82
+ beautifulsoup4 = "*"
83
+
84
+ [[package]]
85
+ name = "certifi"
86
+ version = "2023.11.17"
87
+ description = "Python package for providing Mozilla's CA Bundle."
88
+ optional = false
89
+ python-versions = ">=3.6"
90
+ files = [
91
+ {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"},
92
+ {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"},
93
+ ]
94
+
95
+ [[package]]
96
+ name = "charset-normalizer"
97
+ version = "3.3.2"
98
+ description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
99
+ optional = false
100
+ python-versions = ">=3.7.0"
101
+ files = [
102
+ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
103
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
104
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
105
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
106
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
107
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
108
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
109
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
110
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
111
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
112
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
113
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
114
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
115
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
116
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
117
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
118
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
119
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
120
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
121
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
122
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
123
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
124
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
125
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
126
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
127
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
128
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
129
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
130
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
131
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
132
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
133
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
134
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
135
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
136
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
137
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
138
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
139
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
140
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
141
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
142
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
143
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
144
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
145
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
146
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
147
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
148
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
149
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
150
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
151
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
152
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
153
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
154
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
155
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
156
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
157
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
158
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
159
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
160
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
161
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
162
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
163
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
164
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
165
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
166
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
167
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
168
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
169
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
170
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
171
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
172
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
173
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
174
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
175
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
176
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
177
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
178
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
179
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
180
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
181
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
182
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
183
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
184
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
185
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
186
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
187
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
188
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
189
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
190
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
191
+ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
192
+ ]
193
+
194
+ [[package]]
195
+ name = "click"
196
+ version = "8.1.7"
197
+ description = "Composable command line interface toolkit"
198
+ optional = false
199
+ python-versions = ">=3.7"
200
+ files = [
201
+ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
202
+ {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
203
+ ]
204
+
205
+ [package.dependencies]
206
+ colorama = {version = "*", markers = "platform_system == \"Windows\""}
207
+
208
+ [[package]]
209
+ name = "colorama"
210
+ version = "0.4.6"
211
+ description = "Cross-platform colored terminal text."
212
+ optional = false
213
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
214
+ files = [
215
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
216
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
217
+ ]
218
+
219
+ [[package]]
220
+ name = "consultor"
221
+ version = "0.2.0"
222
+ description = "Consultor te ayuda a explorar las diferentes carreras y cursos que las universidades ofrecen"
223
+ optional = false
224
+ python-versions = "*"
225
+ files = [
226
+ {file = "consultor-0.2.0-py2.py3-none-any.whl", hash = "sha256:18dd8bc503660c27679a6e13c6a1d14426c8e1e3ebda1f7d287440916c2a8891"},
227
+ ]
228
+
229
+ [package.dependencies]
230
+ beautifultable = "*"
231
+ pymongo = "*"
232
+
233
+ [[package]]
234
+ name = "dnspython"
235
+ version = "2.4.2"
236
+ description = "DNS toolkit"
237
+ optional = false
238
+ python-versions = ">=3.8,<4.0"
239
+ files = [
240
+ {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"},
241
+ {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"},
242
+ ]
243
+
244
+ [package.extras]
245
+ dnssec = ["cryptography (>=2.6,<42.0)"]
246
+ doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"]
247
+ doq = ["aioquic (>=0.9.20)"]
248
+ idna = ["idna (>=2.1,<4.0)"]
249
+ trio = ["trio (>=0.14,<0.23)"]
250
+ wmi = ["wmi (>=1.5.1,<2.0.0)"]
251
+
252
+ [[package]]
253
+ name = "exceptiongroup"
254
+ version = "1.2.0"
255
+ description = "Backport of PEP 654 (exception groups)"
256
+ optional = false
257
+ python-versions = ">=3.7"
258
+ files = [
259
+ {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"},
260
+ {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"},
261
+ ]
262
+
263
+ [package.extras]
264
+ test = ["pytest (>=6)"]
265
+
266
+ [[package]]
267
+ name = "fastapi"
268
+ version = "0.104.1"
269
+ description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
270
+ optional = false
271
+ python-versions = ">=3.8"
272
+ files = [
273
+ {file = "fastapi-0.104.1-py3-none-any.whl", hash = "sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241"},
274
+ {file = "fastapi-0.104.1.tar.gz", hash = "sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae"},
275
+ ]
276
+
277
+ [package.dependencies]
278
+ anyio = ">=3.7.1,<4.0.0"
279
+ pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0"
280
+ starlette = ">=0.27.0,<0.28.0"
281
+ typing-extensions = ">=4.8.0"
282
+
283
+ [package.extras]
284
+ all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
285
+
286
+ [[package]]
287
+ name = "functions"
288
+ version = "0.7.0"
289
+ description = "Functional programming in Python"
290
+ optional = false
291
+ python-versions = "*"
292
+ files = [
293
+ {file = "functions-0.7.0.tar.gz", hash = "sha256:5a36bd11d36bbce210fecddd9ff1a475a86035905818a4075d6c7ebb2f714181"},
294
+ ]
295
+
296
+ [[package]]
297
+ name = "h11"
298
+ version = "0.14.0"
299
+ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
300
+ optional = false
301
+ python-versions = ">=3.7"
302
+ files = [
303
+ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
304
+ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
305
+ ]
306
+
307
+ [[package]]
308
+ name = "httpcore"
309
+ version = "1.0.2"
310
+ description = "A minimal low-level HTTP client."
311
+ optional = false
312
+ python-versions = ">=3.8"
313
+ files = [
314
+ {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"},
315
+ {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"},
316
+ ]
317
+
318
+ [package.dependencies]
319
+ certifi = "*"
320
+ h11 = ">=0.13,<0.15"
321
+
322
+ [package.extras]
323
+ asyncio = ["anyio (>=4.0,<5.0)"]
324
+ http2 = ["h2 (>=3,<5)"]
325
+ socks = ["socksio (==1.*)"]
326
+ trio = ["trio (>=0.22.0,<0.23.0)"]
327
+
328
+ [[package]]
329
+ name = "httpx"
330
+ version = "0.25.2"
331
+ description = "The next generation HTTP client."
332
+ optional = false
333
+ python-versions = ">=3.8"
334
+ files = [
335
+ {file = "httpx-0.25.2-py3-none-any.whl", hash = "sha256:a05d3d052d9b2dfce0e3896636467f8a5342fb2b902c819428e1ac65413ca118"},
336
+ {file = "httpx-0.25.2.tar.gz", hash = "sha256:8b8fcaa0c8ea7b05edd69a094e63a2094c4efcb48129fb757361bc423c0ad9e8"},
337
+ ]
338
+
339
+ [package.dependencies]
340
+ anyio = "*"
341
+ certifi = "*"
342
+ httpcore = "==1.*"
343
+ idna = "*"
344
+ sniffio = "*"
345
+
346
+ [package.extras]
347
+ brotli = ["brotli", "brotlicffi"]
348
+ cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
349
+ http2 = ["h2 (>=3,<5)"]
350
+ socks = ["socksio (==1.*)"]
351
+
352
+ [[package]]
353
+ name = "idna"
354
+ version = "3.6"
355
+ description = "Internationalized Domain Names in Applications (IDNA)"
356
+ optional = false
357
+ python-versions = ">=3.5"
358
+ files = [
359
+ {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
360
+ {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
361
+ ]
362
+
363
+ [[package]]
364
+ name = "pydantic"
365
+ version = "2.5.2"
366
+ description = "Data validation using Python type hints"
367
+ optional = false
368
+ python-versions = ">=3.7"
369
+ files = [
370
+ {file = "pydantic-2.5.2-py3-none-any.whl", hash = "sha256:80c50fb8e3dcecfddae1adbcc00ec5822918490c99ab31f6cf6140ca1c1429f0"},
371
+ {file = "pydantic-2.5.2.tar.gz", hash = "sha256:ff177ba64c6faf73d7afa2e8cad38fd456c0dbe01c9954e71038001cd15a6edd"},
372
+ ]
373
+
374
+ [package.dependencies]
375
+ annotated-types = ">=0.4.0"
376
+ pydantic-core = "2.14.5"
377
+ typing-extensions = ">=4.6.1"
378
+
379
+ [package.extras]
380
+ email = ["email-validator (>=2.0.0)"]
381
+
382
+ [[package]]
383
+ name = "pydantic-core"
384
+ version = "2.14.5"
385
+ description = ""
386
+ optional = false
387
+ python-versions = ">=3.7"
388
+ files = [
389
+ {file = "pydantic_core-2.14.5-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:7e88f5696153dc516ba6e79f82cc4747e87027205f0e02390c21f7cb3bd8abfd"},
390
+ {file = "pydantic_core-2.14.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4641e8ad4efb697f38a9b64ca0523b557c7931c5f84e0fd377a9a3b05121f0de"},
391
+ {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:774de879d212db5ce02dfbf5b0da9a0ea386aeba12b0b95674a4ce0593df3d07"},
392
+ {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebb4e035e28f49b6f1a7032920bb9a0c064aedbbabe52c543343d39341a5b2a3"},
393
+ {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b53e9ad053cd064f7e473a5f29b37fc4cc9dc6d35f341e6afc0155ea257fc911"},
394
+ {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aa1768c151cf562a9992462239dfc356b3d1037cc5a3ac829bb7f3bda7cc1f9"},
395
+ {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac5c82fc632c599f4639a5886f96867ffced74458c7db61bc9a66ccb8ee3113"},
396
+ {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2ae91f50ccc5810b2f1b6b858257c9ad2e08da70bf890dee02de1775a387c66"},
397
+ {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6b9ff467ffbab9110e80e8c8de3bcfce8e8b0fd5661ac44a09ae5901668ba997"},
398
+ {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:61ea96a78378e3bd5a0be99b0e5ed00057b71f66115f5404d0dae4819f495093"},
399
+ {file = "pydantic_core-2.14.5-cp310-none-win32.whl", hash = "sha256:bb4c2eda937a5e74c38a41b33d8c77220380a388d689bcdb9b187cf6224c9720"},
400
+ {file = "pydantic_core-2.14.5-cp310-none-win_amd64.whl", hash = "sha256:b7851992faf25eac90bfcb7bfd19e1f5ffa00afd57daec8a0042e63c74a4551b"},
401
+ {file = "pydantic_core-2.14.5-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:4e40f2bd0d57dac3feb3a3aed50f17d83436c9e6b09b16af271b6230a2915459"},
402
+ {file = "pydantic_core-2.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab1cdb0f14dc161ebc268c09db04d2c9e6f70027f3b42446fa11c153521c0e88"},
403
+ {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aae7ea3a1c5bb40c93cad361b3e869b180ac174656120c42b9fadebf685d121b"},
404
+ {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60b7607753ba62cf0739177913b858140f11b8af72f22860c28eabb2f0a61937"},
405
+ {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2248485b0322c75aee7565d95ad0e16f1c67403a470d02f94da7344184be770f"},
406
+ {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:823fcc638f67035137a5cd3f1584a4542d35a951c3cc68c6ead1df7dac825c26"},
407
+ {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96581cfefa9123accc465a5fd0cc833ac4d75d55cc30b633b402e00e7ced00a6"},
408
+ {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a33324437018bf6ba1bb0f921788788641439e0ed654b233285b9c69704c27b4"},
409
+ {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9bd18fee0923ca10f9a3ff67d4851c9d3e22b7bc63d1eddc12f439f436f2aada"},
410
+ {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:853a2295c00f1d4429db4c0fb9475958543ee80cfd310814b5c0ef502de24dda"},
411
+ {file = "pydantic_core-2.14.5-cp311-none-win32.whl", hash = "sha256:cb774298da62aea5c80a89bd58c40205ab4c2abf4834453b5de207d59d2e1651"},
412
+ {file = "pydantic_core-2.14.5-cp311-none-win_amd64.whl", hash = "sha256:e87fc540c6cac7f29ede02e0f989d4233f88ad439c5cdee56f693cc9c1c78077"},
413
+ {file = "pydantic_core-2.14.5-cp311-none-win_arm64.whl", hash = "sha256:57d52fa717ff445cb0a5ab5237db502e6be50809b43a596fb569630c665abddf"},
414
+ {file = "pydantic_core-2.14.5-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:e60f112ac88db9261ad3a52032ea46388378034f3279c643499edb982536a093"},
415
+ {file = "pydantic_core-2.14.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6e227c40c02fd873c2a73a98c1280c10315cbebe26734c196ef4514776120aeb"},
416
+ {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0cbc7fff06a90bbd875cc201f94ef0ee3929dfbd5c55a06674b60857b8b85ed"},
417
+ {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:103ef8d5b58596a731b690112819501ba1db7a36f4ee99f7892c40da02c3e189"},
418
+ {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c949f04ecad823f81b1ba94e7d189d9dfb81edbb94ed3f8acfce41e682e48cef"},
419
+ {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1452a1acdf914d194159439eb21e56b89aa903f2e1c65c60b9d874f9b950e5d"},
420
+ {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4679d4c2b089e5ef89756bc73e1926745e995d76e11925e3e96a76d5fa51fc"},
421
+ {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf9d3fe53b1ee360e2421be95e62ca9b3296bf3f2fb2d3b83ca49ad3f925835e"},
422
+ {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:70f4b4851dbb500129681d04cc955be2a90b2248d69273a787dda120d5cf1f69"},
423
+ {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:59986de5710ad9613ff61dd9b02bdd2f615f1a7052304b79cc8fa2eb4e336d2d"},
424
+ {file = "pydantic_core-2.14.5-cp312-none-win32.whl", hash = "sha256:699156034181e2ce106c89ddb4b6504c30db8caa86e0c30de47b3e0654543260"},
425
+ {file = "pydantic_core-2.14.5-cp312-none-win_amd64.whl", hash = "sha256:5baab5455c7a538ac7e8bf1feec4278a66436197592a9bed538160a2e7d11e36"},
426
+ {file = "pydantic_core-2.14.5-cp312-none-win_arm64.whl", hash = "sha256:e47e9a08bcc04d20975b6434cc50bf82665fbc751bcce739d04a3120428f3e27"},
427
+ {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:af36f36538418f3806048f3b242a1777e2540ff9efaa667c27da63d2749dbce0"},
428
+ {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:45e95333b8418ded64745f14574aa9bfc212cb4fbeed7a687b0c6e53b5e188cd"},
429
+ {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e47a76848f92529879ecfc417ff88a2806438f57be4a6a8bf2961e8f9ca9ec7"},
430
+ {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d81e6987b27bc7d101c8597e1cd2bcaa2fee5e8e0f356735c7ed34368c471550"},
431
+ {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34708cc82c330e303f4ce87758828ef6e457681b58ce0e921b6e97937dd1e2a3"},
432
+ {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:652c1988019752138b974c28f43751528116bcceadad85f33a258869e641d753"},
433
+ {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e4d090e73e0725b2904fdbdd8d73b8802ddd691ef9254577b708d413bf3006e"},
434
+ {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c7d5b5005f177764e96bd584d7bf28d6e26e96f2a541fdddb934c486e36fd59"},
435
+ {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a71891847f0a73b1b9eb86d089baee301477abef45f7eaf303495cd1473613e4"},
436
+ {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a717aef6971208f0851a2420b075338e33083111d92041157bbe0e2713b37325"},
437
+ {file = "pydantic_core-2.14.5-cp37-none-win32.whl", hash = "sha256:de790a3b5aa2124b8b78ae5faa033937a72da8efe74b9231698b5a1dd9be3405"},
438
+ {file = "pydantic_core-2.14.5-cp37-none-win_amd64.whl", hash = "sha256:6c327e9cd849b564b234da821236e6bcbe4f359a42ee05050dc79d8ed2a91588"},
439
+ {file = "pydantic_core-2.14.5-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ef98ca7d5995a82f43ec0ab39c4caf6a9b994cb0b53648ff61716370eadc43cf"},
440
+ {file = "pydantic_core-2.14.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6eae413494a1c3f89055da7a5515f32e05ebc1a234c27674a6956755fb2236f"},
441
+ {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf4e6d85614f7a4956c2de5a56531f44efb973d2fe4a444d7251df5d5c4dcfd"},
442
+ {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6637560562134b0e17de333d18e69e312e0458ee4455bdad12c37100b7cad706"},
443
+ {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77fa384d8e118b3077cccfcaf91bf83c31fe4dc850b5e6ee3dc14dc3d61bdba1"},
444
+ {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16e29bad40bcf97aac682a58861249ca9dcc57c3f6be22f506501833ddb8939c"},
445
+ {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531f4b4252fac6ca476fbe0e6f60f16f5b65d3e6b583bc4d87645e4e5ddde331"},
446
+ {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:074f3d86f081ce61414d2dc44901f4f83617329c6f3ab49d2bc6c96948b2c26b"},
447
+ {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c2adbe22ab4babbca99c75c5d07aaf74f43c3195384ec07ccbd2f9e3bddaecec"},
448
+ {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0f6116a558fd06d1b7c2902d1c4cf64a5bd49d67c3540e61eccca93f41418124"},
449
+ {file = "pydantic_core-2.14.5-cp38-none-win32.whl", hash = "sha256:fe0a5a1025eb797752136ac8b4fa21aa891e3d74fd340f864ff982d649691867"},
450
+ {file = "pydantic_core-2.14.5-cp38-none-win_amd64.whl", hash = "sha256:079206491c435b60778cf2b0ee5fd645e61ffd6e70c47806c9ed51fc75af078d"},
451
+ {file = "pydantic_core-2.14.5-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:a6a16f4a527aae4f49c875da3cdc9508ac7eef26e7977952608610104244e1b7"},
452
+ {file = "pydantic_core-2.14.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:abf058be9517dc877227ec3223f0300034bd0e9f53aebd63cf4456c8cb1e0863"},
453
+ {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49b08aae5013640a3bfa25a8eebbd95638ec3f4b2eaf6ed82cf0c7047133f03b"},
454
+ {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2d97e906b4ff36eb464d52a3bc7d720bd6261f64bc4bcdbcd2c557c02081ed2"},
455
+ {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3128e0bbc8c091ec4375a1828d6118bc20404883169ac95ffa8d983b293611e6"},
456
+ {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88e74ab0cdd84ad0614e2750f903bb0d610cc8af2cc17f72c28163acfcf372a4"},
457
+ {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c339dabd8ee15f8259ee0f202679b6324926e5bc9e9a40bf981ce77c038553db"},
458
+ {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3387277f1bf659caf1724e1afe8ee7dbc9952a82d90f858ebb931880216ea955"},
459
+ {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ba6b6b3846cfc10fdb4c971980a954e49d447cd215ed5a77ec8190bc93dd7bc5"},
460
+ {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca61d858e4107ce5e1330a74724fe757fc7135190eb5ce5c9d0191729f033209"},
461
+ {file = "pydantic_core-2.14.5-cp39-none-win32.whl", hash = "sha256:ec1e72d6412f7126eb7b2e3bfca42b15e6e389e1bc88ea0069d0cc1742f477c6"},
462
+ {file = "pydantic_core-2.14.5-cp39-none-win_amd64.whl", hash = "sha256:c0b97ec434041827935044bbbe52b03d6018c2897349670ff8fe11ed24d1d4ab"},
463
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79e0a2cdbdc7af3f4aee3210b1172ab53d7ddb6a2d8c24119b5706e622b346d0"},
464
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:678265f7b14e138d9a541ddabbe033012a2953315739f8cfa6d754cc8063e8ca"},
465
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b15e855ae44f0c6341ceb74df61b606e11f1087e87dcb7482377374aac6abe"},
466
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09b0e985fbaf13e6b06a56d21694d12ebca6ce5414b9211edf6f17738d82b0f8"},
467
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ad873900297bb36e4b6b3f7029d88ff9829ecdc15d5cf20161775ce12306f8a"},
468
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2d0ae0d8670164e10accbeb31d5ad45adb71292032d0fdb9079912907f0085f4"},
469
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d37f8ec982ead9ba0a22a996129594938138a1503237b87318392a48882d50b7"},
470
+ {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:35613015f0ba7e14c29ac6c2483a657ec740e5ac5758d993fdd5870b07a61d8b"},
471
+ {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab4ea451082e684198636565224bbb179575efc1658c48281b2c866bfd4ddf04"},
472
+ {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ce601907e99ea5b4adb807ded3570ea62186b17f88e271569144e8cca4409c7"},
473
+ {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb2ed8b3fe4bf4506d6dab3b93b83bbc22237e230cba03866d561c3577517d18"},
474
+ {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70f947628e074bb2526ba1b151cee10e4c3b9670af4dbb4d73bc8a89445916b5"},
475
+ {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4bc536201426451f06f044dfbf341c09f540b4ebdb9fd8d2c6164d733de5e634"},
476
+ {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4791cf0f8c3104ac668797d8c514afb3431bc3305f5638add0ba1a5a37e0d88"},
477
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:038c9f763e650712b899f983076ce783175397c848da04985658e7628cbe873b"},
478
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:27548e16c79702f1e03f5628589c6057c9ae17c95b4c449de3c66b589ead0520"},
479
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97bee68898f3f4344eb02fec316db93d9700fb1e6a5b760ffa20d71d9a46ce3"},
480
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9b759b77f5337b4ea024f03abc6464c9f35d9718de01cfe6bae9f2e139c397e"},
481
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:439c9afe34638ace43a49bf72d201e0ffc1a800295bed8420c2a9ca8d5e3dbb3"},
482
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ba39688799094c75ea8a16a6b544eb57b5b0f3328697084f3f2790892510d144"},
483
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ccd4d5702bb90b84df13bd491be8d900b92016c5a455b7e14630ad7449eb03f8"},
484
+ {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:81982d78a45d1e5396819bbb4ece1fadfe5f079335dd28c4ab3427cd95389944"},
485
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:7f8210297b04e53bc3da35db08b7302a6a1f4889c79173af69b72ec9754796b8"},
486
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:8c8a8812fe6f43a3a5b054af6ac2d7b8605c7bcab2804a8a7d68b53f3cd86e00"},
487
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:206ed23aecd67c71daf5c02c3cd19c0501b01ef3cbf7782db9e4e051426b3d0d"},
488
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2027d05c8aebe61d898d4cffd774840a9cb82ed356ba47a90d99ad768f39789"},
489
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40180930807ce806aa71eda5a5a5447abb6b6a3c0b4b3b1b1962651906484d68"},
490
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:615a0a4bff11c45eb3c1996ceed5bdaa2f7b432425253a7c2eed33bb86d80abc"},
491
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5e412d717366e0677ef767eac93566582518fe8be923361a5c204c1a62eaafe"},
492
+ {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:513b07e99c0a267b1d954243845d8a833758a6726a3b5d8948306e3fe14675e3"},
493
+ {file = "pydantic_core-2.14.5.tar.gz", hash = "sha256:6d30226dfc816dd0fdf120cae611dd2215117e4f9b124af8c60ab9093b6e8e71"},
494
+ ]
495
+
496
+ [package.dependencies]
497
+ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
498
+
499
+ [[package]]
500
+ name = "pymongo"
501
+ version = "4.6.1"
502
+ description = "Python driver for MongoDB <http://www.mongodb.org>"
503
+ optional = false
504
+ python-versions = ">=3.7"
505
+ files = [
506
+ {file = "pymongo-4.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4344c30025210b9fa80ec257b0e0aab5aa1d5cca91daa70d82ab97b482cc038e"},
507
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux1_i686.whl", hash = "sha256:1c5654bb8bb2bdb10e7a0bc3c193dd8b49a960b9eebc4381ff5a2043f4c3c441"},
508
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:eaf2f65190c506def2581219572b9c70b8250615dc918b3b7c218361a51ec42e"},
509
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:262356ea5fcb13d35fb2ab6009d3927bafb9504ef02339338634fffd8a9f1ae4"},
510
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:2dd2f6960ee3c9360bed7fb3c678be0ca2d00f877068556785ec2eb6b73d2414"},
511
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:ff925f1cca42e933376d09ddc254598f8c5fcd36efc5cac0118bb36c36217c41"},
512
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:3cadf7f4c8e94d8a77874b54a63c80af01f4d48c4b669c8b6867f86a07ba994f"},
513
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55dac73316e7e8c2616ba2e6f62b750918e9e0ae0b2053699d66ca27a7790105"},
514
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:154b361dcb358ad377d5d40df41ee35f1cc14c8691b50511547c12404f89b5cb"},
515
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2940aa20e9cc328e8ddeacea8b9a6f5ddafe0b087fedad928912e787c65b4909"},
516
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:010bc9aa90fd06e5cc52c8fac2c2fd4ef1b5f990d9638548dde178005770a5e8"},
517
+ {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e470fa4bace5f50076c32f4b3cc182b31303b4fefb9b87f990144515d572820b"},
518
+ {file = "pymongo-4.6.1-cp310-cp310-win32.whl", hash = "sha256:da08ea09eefa6b960c2dd9a68ec47949235485c623621eb1d6c02b46765322ac"},
519
+ {file = "pymongo-4.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:13d613c866f9f07d51180f9a7da54ef491d130f169e999c27e7633abe8619ec9"},
520
+ {file = "pymongo-4.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6a0ae7a48a6ef82ceb98a366948874834b86c84e288dbd55600c1abfc3ac1d88"},
521
+ {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bd94c503271e79917b27c6e77f7c5474da6930b3fb9e70a12e68c2dff386b9a"},
522
+ {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d4ccac3053b84a09251da8f5350bb684cbbf8c8c01eda6b5418417d0a8ab198"},
523
+ {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:349093675a2d3759e4fb42b596afffa2b2518c890492563d7905fac503b20daa"},
524
+ {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88beb444fb438385e53dc9110852910ec2a22f0eab7dd489e827038fdc19ed8d"},
525
+ {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8e62d06e90f60ea2a3d463ae51401475568b995bafaffd81767d208d84d7bb1"},
526
+ {file = "pymongo-4.6.1-cp311-cp311-win32.whl", hash = "sha256:5556e306713e2522e460287615d26c0af0fe5ed9d4f431dad35c6624c5d277e9"},
527
+ {file = "pymongo-4.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:b10d8cda9fc2fcdcfa4a000aa10413a2bf8b575852cd07cb8a595ed09689ca98"},
528
+ {file = "pymongo-4.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b435b13bb8e36be11b75f7384a34eefe487fe87a6267172964628e2b14ecf0a7"},
529
+ {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e438417ce1dc5b758742e12661d800482200b042d03512a8f31f6aaa9137ad40"},
530
+ {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b47ebd89e69fbf33d1c2df79759d7162fc80c7652dacfec136dae1c9b3afac7"},
531
+ {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbed8cccebe1169d45cedf00461b2842652d476d2897fd1c42cf41b635d88746"},
532
+ {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30a9e06041fbd7a7590693ec5e407aa8737ad91912a1e70176aff92e5c99d20"},
533
+ {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8729dbf25eb32ad0dc0b9bd5e6a0d0b7e5c2dc8ec06ad171088e1896b522a74"},
534
+ {file = "pymongo-4.6.1-cp312-cp312-win32.whl", hash = "sha256:3177f783ae7e08aaf7b2802e0df4e4b13903520e8380915e6337cdc7a6ff01d8"},
535
+ {file = "pymongo-4.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:00c199e1c593e2c8b033136d7a08f0c376452bac8a896c923fcd6f419e07bdd2"},
536
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:13552ca505366df74e3e2f0a4f27c363928f3dff0eef9f281eb81af7f29bc3c5"},
537
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:77e0df59b1a4994ad30c6d746992ae887f9756a43fc25dec2db515d94cf0222d"},
538
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3a7f02a58a0c2912734105e05dedbee4f7507e6f1bd132ebad520be0b11d46fd"},
539
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:026a24a36394dc8930cbcb1d19d5eb35205ef3c838a7e619e04bd170713972e7"},
540
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:3b287e814a01deddb59b88549c1e0c87cefacd798d4afc0c8bd6042d1c3d48aa"},
541
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:9a710c184ba845afb05a6f876edac8f27783ba70e52d5eaf939f121fc13b2f59"},
542
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:30b2c9caf3e55c2e323565d1f3b7e7881ab87db16997dc0cbca7c52885ed2347"},
543
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff62ba8ff70f01ab4fe0ae36b2cb0b5d1f42e73dfc81ddf0758cd9f77331ad25"},
544
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:547dc5d7f834b1deefda51aedb11a7af9c51c45e689e44e14aa85d44147c7657"},
545
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1de3c6faf948f3edd4e738abdb4b76572b4f4fdfc1fed4dad02427e70c5a6219"},
546
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2831e05ce0a4df10c4ac5399ef50b9a621f90894c2a4d2945dc5658765514ed"},
547
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:144a31391a39a390efce0c5ebcaf4bf112114af4384c90163f402cec5ede476b"},
548
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33bb16a07d3cc4e0aea37b242097cd5f7a156312012455c2fa8ca396953b11c4"},
549
+ {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b7b1a83ce514700276a46af3d9e481ec381f05b64939effc9065afe18456a6b9"},
550
+ {file = "pymongo-4.6.1-cp37-cp37m-win32.whl", hash = "sha256:3071ec998cc3d7b4944377e5f1217c2c44b811fae16f9a495c7a1ce9b42fb038"},
551
+ {file = "pymongo-4.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2346450a075625c4d6166b40a013b605a38b6b6168ce2232b192a37fb200d588"},
552
+ {file = "pymongo-4.6.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:061598cbc6abe2f382ab64c9caa83faa2f4c51256f732cdd890bcc6e63bfb67e"},
553
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d483793a384c550c2d12cb794ede294d303b42beff75f3b3081f57196660edaf"},
554
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:f9756f1d25454ba6a3c2f1ef8b7ddec23e5cdeae3dc3c3377243ae37a383db00"},
555
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:1ed23b0e2dac6f84f44c8494fbceefe6eb5c35db5c1099f56ab78fc0d94ab3af"},
556
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:3d18a9b9b858ee140c15c5bfcb3e66e47e2a70a03272c2e72adda2482f76a6ad"},
557
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:c258dbacfff1224f13576147df16ce3c02024a0d792fd0323ac01bed5d3c545d"},
558
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:f7acc03a4f1154ba2643edeb13658d08598fe6e490c3dd96a241b94f09801626"},
559
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:76013fef1c9cd1cd00d55efde516c154aa169f2bf059b197c263a255ba8a9ddf"},
560
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0e6a6c807fa887a0c51cc24fe7ea51bb9e496fe88f00d7930063372c3664c3"},
561
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd1fa413f8b9ba30140de198e4f408ffbba6396864c7554e0867aa7363eb58b2"},
562
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d219b4508f71d762368caec1fc180960569766049bbc4d38174f05e8ef2fe5b"},
563
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b81ecf18031998ad7db53b960d1347f8f29e8b7cb5ea7b4394726468e4295e"},
564
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56816e43c92c2fa8c11dc2a686f0ca248bea7902f4a067fa6cbc77853b0f041e"},
565
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef801027629c5b511cf2ba13b9be29bfee36ae834b2d95d9877818479cdc99ea"},
566
+ {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d4c2be9760b112b1caf649b4977b81b69893d75aa86caf4f0f398447be871f3c"},
567
+ {file = "pymongo-4.6.1-cp38-cp38-win32.whl", hash = "sha256:39d77d8bbb392fa443831e6d4ae534237b1f4eee6aa186f0cdb4e334ba89536e"},
568
+ {file = "pymongo-4.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:4497d49d785482cc1a44a0ddf8830b036a468c088e72a05217f5b60a9e025012"},
569
+ {file = "pymongo-4.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:69247f7a2835fc0984bbf0892e6022e9a36aec70e187fcfe6cae6a373eb8c4de"},
570
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:7bb0e9049e81def6829d09558ad12d16d0454c26cabe6efc3658e544460688d9"},
571
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6a1810c2cbde714decf40f811d1edc0dae45506eb37298fd9d4247b8801509fe"},
572
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e2aced6fb2f5261b47d267cb40060b73b6527e64afe54f6497844c9affed5fd0"},
573
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d0355cff58a4ed6d5e5f6b9c3693f52de0784aa0c17119394e2a8e376ce489d4"},
574
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:3c74f4725485f0a7a3862cfd374cc1b740cebe4c133e0c1425984bcdcce0f4bb"},
575
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:9c79d597fb3a7c93d7c26924db7497eba06d58f88f58e586aa69b2ad89fee0f8"},
576
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8ec75f35f62571a43e31e7bd11749d974c1b5cd5ea4a8388725d579263c0fdf6"},
577
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e641f931c5cd95b376fd3c59db52770e17bec2bf86ef16cc83b3906c054845"},
578
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9aafd036f6f2e5ad109aec92f8dbfcbe76cff16bad683eb6dd18013739c0b3ae"},
579
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f2b856518bfcfa316c8dae3d7b412aecacf2e8ba30b149f5eb3b63128d703b9"},
580
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec31adc2e988fd7db3ab509954791bbc5a452a03c85e45b804b4bfc31fa221d"},
581
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9167e735379ec43d8eafa3fd675bfbb12e2c0464f98960586e9447d2cf2c7a83"},
582
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1461199b07903fc1424709efafe379205bf5f738144b1a50a08b0396357b5abf"},
583
+ {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3094c7d2f820eecabadae76bfec02669567bbdd1730eabce10a5764778564f7b"},
584
+ {file = "pymongo-4.6.1-cp39-cp39-win32.whl", hash = "sha256:c91ea3915425bd4111cb1b74511cdc56d1d16a683a48bf2a5a96b6a6c0f297f7"},
585
+ {file = "pymongo-4.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef102a67ede70e1721fe27f75073b5314911dbb9bc27cde0a1c402a11531e7bd"},
586
+ {file = "pymongo-4.6.1.tar.gz", hash = "sha256:31dab1f3e1d0cdd57e8df01b645f52d43cc1b653ed3afd535d2891f4fc4f9712"},
587
+ ]
588
+
589
+ [package.dependencies]
590
+ dnspython = ">=1.16.0,<3.0.0"
591
+
592
+ [package.extras]
593
+ aws = ["pymongo-auth-aws (<2.0.0)"]
594
+ encryption = ["certifi", "pymongo[aws]", "pymongocrypt (>=1.6.0,<2.0.0)"]
595
+ gssapi = ["pykerberos", "winkerberos (>=0.5.0)"]
596
+ ocsp = ["certifi", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"]
597
+ snappy = ["python-snappy"]
598
+ test = ["pytest (>=7)"]
599
+ zstd = ["zstandard"]
600
+
601
+ [[package]]
602
+ name = "python-dotenv"
603
+ version = "1.0.0"
604
+ description = "Read key-value pairs from a .env file and set them as environment variables"
605
+ optional = false
606
+ python-versions = ">=3.8"
607
+ files = [
608
+ {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"},
609
+ {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"},
610
+ ]
611
+
612
+ [package.extras]
613
+ cli = ["click (>=5.0)"]
614
+
615
+ [[package]]
616
+ name = "requests"
617
+ version = "2.31.0"
618
+ description = "Python HTTP for Humans."
619
+ optional = false
620
+ python-versions = ">=3.7"
621
+ files = [
622
+ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
623
+ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
624
+ ]
625
+
626
+ [package.dependencies]
627
+ certifi = ">=2017.4.17"
628
+ charset-normalizer = ">=2,<4"
629
+ idna = ">=2.5,<4"
630
+ urllib3 = ">=1.21.1,<3"
631
+
632
+ [package.extras]
633
+ socks = ["PySocks (>=1.5.6,!=1.5.7)"]
634
+ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
635
+
636
+ [[package]]
637
+ name = "sniffio"
638
+ version = "1.3.0"
639
+ description = "Sniff out which async library your code is running under"
640
+ optional = false
641
+ python-versions = ">=3.7"
642
+ files = [
643
+ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"},
644
+ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"},
645
+ ]
646
+
647
+ [[package]]
648
+ name = "soupsieve"
649
+ version = "2.5"
650
+ description = "A modern CSS selector implementation for Beautiful Soup."
651
+ optional = false
652
+ python-versions = ">=3.8"
653
+ files = [
654
+ {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"},
655
+ {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
656
+ ]
657
+
658
+ [[package]]
659
+ name = "starlette"
660
+ version = "0.27.0"
661
+ description = "The little ASGI library that shines."
662
+ optional = false
663
+ python-versions = ">=3.7"
664
+ files = [
665
+ {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"},
666
+ {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"},
667
+ ]
668
+
669
+ [package.dependencies]
670
+ anyio = ">=3.4.0,<5"
671
+
672
+ [package.extras]
673
+ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"]
674
+
675
+ [[package]]
676
+ name = "telegraph"
677
+ version = "2.2.0"
678
+ description = "Telegraph API wrapper"
679
+ optional = false
680
+ python-versions = "*"
681
+ files = [
682
+ {file = "telegraph-2.2.0-py3-none-any.whl", hash = "sha256:d20b2a5d7cfdd66890c8c3fd60aa8585cabb7c6b03579d3eb1cd8af056ed9971"},
683
+ {file = "telegraph-2.2.0.tar.gz", hash = "sha256:012908f18208c451c7189f4bda7c39a1369241ac436c7543bb6c3fccbe9cfd5d"},
684
+ ]
685
+
686
+ [package.dependencies]
687
+ requests = "*"
688
+
689
+ [package.extras]
690
+ aio = ["httpx"]
691
+
692
+ [[package]]
693
+ name = "typing-extensions"
694
+ version = "4.8.0"
695
+ description = "Backported and Experimental Type Hints for Python 3.8+"
696
+ optional = false
697
+ python-versions = ">=3.8"
698
+ files = [
699
+ {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"},
700
+ {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"},
701
+ ]
702
+
703
+ [[package]]
704
+ name = "urllib3"
705
+ version = "2.1.0"
706
+ description = "HTTP library with thread-safe connection pooling, file post, and more."
707
+ optional = false
708
+ python-versions = ">=3.8"
709
+ files = [
710
+ {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"},
711
+ {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"},
712
+ ]
713
+
714
+ [package.extras]
715
+ brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
716
+ socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
717
+ zstd = ["zstandard (>=0.18.0)"]
718
+
719
+ [[package]]
720
+ name = "uvicorn"
721
+ version = "0.24.0.post1"
722
+ description = "The lightning-fast ASGI server."
723
+ optional = false
724
+ python-versions = ">=3.8"
725
+ files = [
726
+ {file = "uvicorn-0.24.0.post1-py3-none-any.whl", hash = "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e"},
727
+ {file = "uvicorn-0.24.0.post1.tar.gz", hash = "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e"},
728
+ ]
729
+
730
+ [package.dependencies]
731
+ click = ">=7.0"
732
+ h11 = ">=0.8"
733
+ typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
734
+
735
+ [package.extras]
736
+ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
737
+
738
+ [[package]]
739
+ name = "wcwidth"
740
+ version = "0.2.12"
741
+ description = "Measures the displayed width of unicode strings in a terminal"
742
+ optional = false
743
+ python-versions = "*"
744
+ files = [
745
+ {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"},
746
+ {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"},
747
+ ]
748
+
749
+ [metadata]
750
+ lock-version = "2.0"
751
+ python-versions = ">=3.10.0,<3.11"
752
+ content-hash = "85b3654f68ecc1e6855d428a22c7d408d03d3e423d6701a05218d710a079e8fd"
requirements.txt ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ requests
2
+ pymongo
3
+ bs4
4
+ g4f
5
+ RyuzakiLib
6
+ uvicorn
7
+ gpytranslate
8
+ google-search-results
9
+ httpx
10
+ serpapi
11
+ telegraph
12
+ pathlib
13
+ anyio
14
+ certifi==2023.7.22
15
+ click
16
+ fastapi[all]
17
+ httpcore
18
+ httptools
19
+ httpx
20
+ pydantic
21
+ python-dotenv
22
+ pyyaml
23
+ typing-extensions
24
+ uvicorn[standard]
25
+ uvloop
26
+ stripe
templates/config.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ TITLE="title template"
2
+ DESCRIPTION="description template"
3
+ VERSION="0.0.1"
4
+ TERMS_OF_SERVICE="terms template"
5
+ DOCS_URL="/"
6
+ API_KEYS="" # get api key from @randydev_bot use /token_api_key
7
+ TELEGRAM_ID=0
templates/main.py ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 2020-2023 (c) Randy W @xtdevs, @xtsea
4
+ #
5
+ # from : https://github.com/TeamKillerX
6
+ # Channel : @RendyProjects
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Affero General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License
18
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
19
+
20
+ import requests
21
+ import json
22
+ import base64
23
+ import re
24
+ import uvicorn
25
+ import os
26
+ import shutil
27
+ import random
28
+ import g4f
29
+ import tempfile
30
+ import io
31
+ from io import BytesIO
32
+ from datetime import datetime as dt
33
+ from dotenv import load_dotenv
34
+ from bs4 import BeautifulSoup
35
+
36
+ from typing import Union
37
+ from typing_extensions import Annotated
38
+ from typing import Annotated, Union
39
+
40
+ from pydantic import BaseModel
41
+ from base64 import b64decode as kc
42
+ from base64 import b64decode
43
+ from random import choice
44
+ from gpytranslate import SyncTranslator
45
+ from httpx import AsyncClient
46
+ from telegraph import Telegraph, upload_file
47
+ from pathlib import Path
48
+ from serpapi import GoogleSearch
49
+
50
+ from fastapi import FastAPI, UploadFile, File
51
+ from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
52
+ from fastapi import Depends, FastAPI, HTTPException, status
53
+ from fastapi.responses import StreamingResponse
54
+ from fastapi import HTTPException
55
+ from fastapi import FastAPI, Request, Header
56
+ from fastapi import Body, Query
57
+ from fastapi.staticfiles import StaticFiles
58
+ from fastapi.templating import Jinja2Templates
59
+ from fastapi.responses import FileResponse
60
+
61
+ from templates.config import *
62
+ from RyuzakiLib.spamwatch.clients import SibylBan
63
+
64
+ logging.basicConfig(level=logging.ERROR)
65
+
66
+ app = FastAPI(
67
+ title=TITLE,
68
+ description=DESCRIPTION,
69
+ version=VERSION,
70
+ terms_of_service=TERMS_OF_SERVICE,
71
+ docs_url=DOCS_URL
72
+ )
73
+
74
+ @app.get("/test")
75
+ def hello_world():
76
+ return {"message": "hello world"}
77
+
78
+ @app.get("/ryuzaki/blacklist-words")
79
+ def blacklist_words():
80
+ try:
81
+ BLACKLIST_WORDS = BadWordsList()
82
+ results_all = BLACKLIST_WORDS.banned_by_google(file_txt="banned_by_google.txt", storage=True)
83
+ return {"status": "true", "results": results_all}
84
+ except Exception as e:
85
+ return {"status": "false", "message": f"Internal server error: {str(e)}"}
86
+
87
+ @app.post("/ryuzaki/sibylban")
88
+ def sibyl_system_ban(
89
+ user_id: int = Query(..., description="User ID in query parameter"),
90
+ reason: str = Query(..., description="Reason in query parameter"),
91
+ api_key: str = Query(..., description="Api key in query parameter")
92
+ ):
93
+ if user_id != TELEGRAM_ID:
94
+ return {"status": "false", "message": "Only Developer"}
95
+
96
+ clients = SiblyBan(api_key=api_key)
97
+ try:
98
+ response = clients.get_ban(user_id=user_id, banlist=True)
99
+ sibyl_user_id = response.get("randydev", {}).get("sibyl_user_id")
100
+ if sibyl_user_id:
101
+ return {"status": "false", "message": "User is already banned"}
102
+
103
+ response_str = clients.add_ban(user_id=user_id, reason=reason, is_banned=True)
104
+ return {
105
+ "status": "true",
106
+ "results": {
107
+ "message": response_str
108
+ }
109
+ }
110
+ except Exception as e:
111
+ logging.error(f"Error in sibyl_system_ban: {e}")
112
+ return {"status": "false", "message": "Internal server error"}
113
+
114
+ if __name__ == "__main__":
115
+ uvicorn.run(app, host="0.0.0.0")
vercel.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 2,
3
+ "builds": [
4
+ {
5
+ "src": "main.py",
6
+ "use": "@vercel/python"
7
+ }
8
+ ],
9
+ "routes": [
10
+ {
11
+ "src": "/(.*)",
12
+ "dest": "main.py"
13
+ }
14
+ ]
15
+ }