1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00

Port ciaoruozi, diario, diarioquote, emojify, peertube

This commit is contained in:
Steffo 2019-11-28 02:30:40 +01:00
parent 961b30cf6c
commit 8b7a53a56c
20 changed files with 817 additions and 314 deletions

40
.gitignore vendored
View file

@ -1,13 +1,31 @@
config.ini # Royalnet ignores
.idea/ config*.toml
.vscode/
__pycache__
downloads/ downloads/
ignored/
markovmodels/
logs/ # Python ignores
*.egg-info/ **/__pycache__/
.pytest_cache/
dist/ dist/
build/ *.egg-info/
venv/ **/*.pyc
# PyCharm ignores
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
.idea/**/contentModel.xml
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
.idea/**/gradle.xml
.idea/**/libraries
.idea/**/markdown-navigator.xml
.idea/**/markdown-exported-files.xml
.idea/**/misc.xml
.idea/**/*.iml

View file

@ -1,65 +1,3 @@
# `royalpack` [![PyPI](https://img.shields.io/pypi/v/royalpack.svg)](https://pypi.org/project/royalpack/) # `royalpack` [![PyPI](https://img.shields.io/pypi/v/royalpack.svg)](https://pypi.org/project/royalpack/)
The Royalnet Pack used in the Royal Games community! The Royalnet Pack used in the Royal Games community!
## Commands
### `ciaoruozi`
### `color`
### `cv`
### `diario`
### `rage`
### `reminder`
### `ship`
### `smecds`
### `videochannel`
### `trivia`
### `matchmaking`
### `pause`
### `play`
### `playmode`
### `queue`
### `skip`
### `summon`
### `youtube`
### `soundcloud`
### `zawarudo`
### `emojify`
### `leagueoflegends`
### `diarioquote`
### `mp3`
### `peertube`
## Stars
### `/api/diario/list`
### `/api/diario/get/{id}`
### `/api/user/list`
### `/api/user/get/{id}`

716
poetry.lock generated
View file

@ -1,7 +1,54 @@
[[package]]
category = "main"
description = "Async http client/server framework (asyncio)"
name = "aiohttp"
optional = false
python-versions = ">=3.5.3"
version = "3.6.2"
[package.dependencies]
async-timeout = ">=3.0,<4.0"
attrs = ">=17.3.0"
chardet = ">=2.0,<4.0"
multidict = ">=4.5,<5.0"
yarl = ">=1.0,<2.0"
[package.extras]
speedups = ["aiodns", "brotlipy", "cchardet"]
[[package]]
category = "main"
description = "Timeout context manager for asyncio programs"
name = "async-timeout"
optional = false
python-versions = ">=3.5.3"
version = "3.0.1"
[[package]]
category = "main"
description = "Classes Without Boilerplate"
name = "attrs"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "19.3.0"
[package.extras]
azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"]
dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"]
docs = ["sphinx", "zope.interface"]
tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
[[package]]
category = "main"
description = "Python package for providing Mozilla's CA Bundle."
name = "certifi"
optional = false
python-versions = "*"
version = "2019.9.11"
[[package]] [[package]]
category = "main" category = "main"
description = "Foreign Function Interface for Python calling C code." description = "Foreign Function Interface for Python calling C code."
marker = "sys_platform == \"linux\""
name = "cffi" name = "cffi"
optional = false optional = false
python-versions = "*" python-versions = "*"
@ -10,10 +57,49 @@ version = "1.13.2"
[package.dependencies] [package.dependencies]
pycparser = "*" pycparser = "*"
[[package]]
category = "main"
description = "Universal encoding detector for Python 2 and 3"
name = "chardet"
optional = false
python-versions = "*"
version = "3.0.4"
[[package]]
category = "main"
description = "Composable command line interface toolkit"
name = "click"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "7.0"
[[package]]
category = "main"
description = "Cross-platform colored terminal text."
marker = "sys_platform == \"win32\""
name = "colorama"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "0.4.1"
[[package]]
category = "main"
description = "Colored terminal output for Python's logging module"
name = "coloredlogs"
optional = false
python-versions = "*"
version = "10.0"
[package.dependencies]
colorama = "*"
humanfriendly = ">=4.7"
[package.extras]
cron = ["capturer (>=2.4)"]
[[package]] [[package]]
category = "main" category = "main"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
marker = "sys_platform == \"linux\""
name = "cryptography" name = "cryptography"
optional = false optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
@ -46,50 +132,131 @@ tzlocal = "*"
[[package]] [[package]]
category = "main" category = "main"
description = "Discover and load entry points from installed packages." description = "A python wrapper for the Discord API"
name = "entrypoints" name = "discord.py"
optional = false optional = false
python-versions = ">=2.7" python-versions = ">=3.5.3"
version = "0.3" version = "1.3.0a2155+gf11fb25"
[[package]]
category = "main"
description = "Low-level, pure Python DBus protocol wrapper."
marker = "sys_platform == \"linux\""
name = "jeepney"
optional = false
python-versions = ">=3.5"
version = "0.4.1"
[package.extras]
dev = ["testpath"]
[[package]]
category = "main"
description = "Store and access your passwords safely."
name = "keyring"
optional = false
python-versions = ">=3.5"
version = "19.2.0"
[package.dependencies] [package.dependencies]
entrypoints = "*" aiohttp = ">=3.6.0,<3.7.0"
pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1" websockets = ">=6.0,<7.0 || >7.0,<8.0 || >8.0,<8.0.1 || >8.0.1,<9.0"
secretstorage = "*"
[package.extras] [package.extras]
docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] docs = ["sphinx (1.8.5)", "sphinxcontrib_trio (1.1.0)", "sphinxcontrib-websupport"]
testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs", "pytest-flake8", "pytest-black-multipy"] voice = ["PyNaCl (1.3.0)"]
[package.source]
reference = "f11fb254f6a37c635e9056cb895de7904774ac22"
type = "git"
url = "https://github.com/Steffo99/discord.py"
[[package]]
category = "main"
description = "Python bindings for FFmpeg - with complex filtering support"
name = "ffmpeg-python"
optional = false
python-versions = "*"
version = "0.2.0"
[package.dependencies]
future = "*"
[package.extras]
dev = ["future (0.17.1)", "numpy (1.16.4)", "pytest-mock (1.10.4)", "pytest (4.6.1)", "Sphinx (2.1.0)", "tox (3.12.1)"]
[[package]]
category = "main"
description = "Clean single-source support for Python 3 and 2"
name = "future"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
version = "0.18.2"
[[package]]
category = "main"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
name = "h11"
optional = false
python-versions = "*"
version = "0.8.1"
[[package]]
category = "main"
description = "A collection of framework independent HTTP protocol utils."
marker = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"pypy\""
name = "httptools"
optional = false
python-versions = "*"
version = "0.0.13"
[[package]]
category = "main"
description = "Human friendly output for text interfaces using Python"
name = "humanfriendly"
optional = false
python-versions = "*"
version = "4.18"
[package.dependencies]
pyreadline = "*"
[[package]]
category = "main"
description = "Internationalized Domain Names in Applications (IDNA)"
name = "idna"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.8"
[[package]]
category = "main"
description = "multidict implementation"
name = "multidict"
optional = false
python-versions = ">=3.5"
version = "4.6.1"
[[package]]
category = "main"
description = "psycopg2 - Python-PostgreSQL Database Adapter"
name = "psycopg2-binary"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
version = "2.8.4"
[[package]] [[package]]
category = "main" category = "main"
description = "C parser in Python" description = "C parser in Python"
marker = "sys_platform == \"linux\""
name = "pycparser" name = "pycparser"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.19" version = "2.19"
[[package]]
category = "main"
description = "Python binding to the Networking and Cryptography (NaCl) library"
name = "pynacl"
optional = false
python-versions = "*"
version = "1.3.0"
[package.dependencies]
cffi = ">=1.4.1"
six = "*"
[package.extras]
docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"]
tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.0)"]
[[package]]
category = "main"
description = "A python implmementation of GNU readline."
marker = "sys_platform == \"win32\""
name = "pyreadline"
optional = false
python-versions = "*"
version = "2.1"
[[package]] [[package]]
category = "main" category = "main"
description = "Extensions to the standard Python datetime module" description = "Extensions to the standard Python datetime module"
@ -101,6 +268,24 @@ version = "2.8.1"
[package.dependencies] [package.dependencies]
six = ">=1.5" six = ">=1.5"
[[package]]
category = "main"
description = "We have made you a wrapper you can't refuse"
name = "python-telegram-bot"
optional = false
python-versions = "*"
version = "12.2.0"
[package.dependencies]
certifi = "*"
cryptography = "*"
future = ">=0.16.0"
tornado = ">=5.1"
[package.extras]
json = ["ujson"]
socks = ["pysocks"]
[[package]] [[package]]
category = "main" category = "main"
description = "World timezone definitions, modern and historical" description = "World timezone definitions, modern and historical"
@ -109,15 +294,6 @@ optional = false
python-versions = "*" python-versions = "*"
version = "2019.3" version = "2019.3"
[[package]]
category = "main"
description = ""
marker = "sys_platform == \"win32\""
name = "pywin32-ctypes"
optional = false
python-versions = "*"
version = "0.2.0"
[[package]] [[package]]
category = "main" category = "main"
description = "Alternative regular expression module, to replace re." description = "Alternative regular expression module, to replace re."
@ -128,43 +304,105 @@ version = "2019.11.1"
[[package]] [[package]]
category = "main" category = "main"
description = "A multipurpose bot and web framework" description = ""
name = "royalnet" name = "royalnet"
optional = false optional = false
python-versions = ">=3.8,<4.0" python-versions = "^3.8"
version = "5.1a1" version = "5.1a1"
[package.dependencies] [package.dependencies]
dateparser = ">=0.7.2,<0.8.0" dateparser = "^0.7.2"
keyring = ">=19.2.0,<20.0.0" toml = "^0.10.0"
[package.dependencies.coloredlogs]
optional = true
version = "^10.0"
[package.dependencies."discord.py"]
optional = true
version = "branch master"
[package.dependencies.ffmpeg_python]
optional = true
version = "~0.2.0"
[package.dependencies.psycopg2_binary]
optional = true
version = "^2.8.4"
[package.dependencies.pynacl]
optional = true
version = "^1.3.0"
[package.dependencies.python_telegram_bot]
optional = true
version = "^12.2.0"
[package.dependencies.sentry_sdk]
optional = true
version = "~0.13.2"
[package.dependencies.sqlalchemy]
optional = true
version = "^1.3.10"
[package.dependencies.starlette]
optional = true
version = "^0.12.13"
[package.dependencies.uvicorn]
optional = true
version = "^0.10.7"
[package.dependencies.websockets]
optional = true
version = "^8.1"
[package.dependencies.youtube_dl]
optional = true
version = "*"
[package.extras] [package.extras]
alchemy_easy = ["psycopg2_binary (>=2.8.4,<3.0.0)", "sqlalchemy (>=1.3.10,<2.0.0)"] alchemy_easy = ["sqlalchemy (^1.3.10)", "psycopg2_binary (^2.8.4)"]
alchemy_hard = ["psycopg2 (>=2.8.4,<3.0.0)", "sqlalchemy (>=1.3.10,<2.0.0)"] alchemy_hard = ["sqlalchemy (^1.3.10)", "psycopg2 (^2.8.4)"]
bard = ["ffmpeg_python (>=0.2.0,<0.3.0)", "youtube-dl"] bard = ["ffmpeg_python (~0.2.0)", "youtube-dl"]
constellation = ["starlette (>=0.12.13,<0.13.0)", "uvicorn (>=0.10.7,<0.11.0)"] coloredlogs = ["coloredlogs (^10.0)"]
discord = ["discord.py", "pynacl (>=1.3.0,<2.0.0)"] constellation = ["starlette (^0.12.13)", "uvicorn (^0.10.7)"]
herald = ["websockets (>=8.1,<9.0)"] discord = ["discord.py", "pynacl (^1.3.0)"]
sentry = ["sentry_sdk (>=0.13.2,<0.14.0)"] herald = ["websockets (^8.1)"]
telegram = ["python_telegram_bot (>=12.2.0,<13.0.0)"] sentry = ["sentry_sdk (~0.13.2)"]
telegram = ["python_telegram_bot (^12.2.0)"]
[package.source] [package.source]
reference = "" reference = "c4bc1811825d7b2609f587a4890ddb5b8a618cf6"
type = "file" type = "git"
url = "../royalnet/dist/royalnet-5.1a1.tar.gz" url = "https://github.com/Steffo99/royalnet/"
[[package]] [[package]]
category = "main" category = "main"
description = "Python bindings to FreeDesktop.org Secret Service API" description = "Python client for Sentry (https://getsentry.com)"
marker = "sys_platform == \"linux\"" name = "sentry-sdk"
name = "secretstorage"
optional = false optional = false
python-versions = ">=3.5" python-versions = "*"
version = "3.1.1" version = "0.13.4"
[package.dependencies] [package.dependencies]
cryptography = "*" certifi = "*"
jeepney = "*" urllib3 = ">=1.10.0"
[package.extras]
aiohttp = ["aiohttp (>=3.5)"]
beam = ["beam (>=2.12)"]
bottle = ["bottle (>=0.12.13)"]
celery = ["celery (>=3)"]
django = ["django (>=1.8)"]
falcon = ["falcon (>=1.4)"]
flask = ["flask (>=0.11)", "blinker (>=1.1)"]
pyspark = ["pyspark (>=2.4.4)"]
rq = ["0.6"]
sanic = ["sanic (>=0.8)"]
sqlalchemy = ["sqlalchemy (>=1.2)"]
tornado = ["tornado (>=5)"]
[[package]] [[package]]
category = "main" category = "main"
@ -174,6 +412,53 @@ optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*" python-versions = ">=2.6, !=3.0.*, !=3.1.*"
version = "1.13.0" version = "1.13.0"
[[package]]
category = "main"
description = "Database Abstraction Library"
name = "sqlalchemy"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.3.11"
[package.extras]
mssql = ["pyodbc"]
mssql_pymssql = ["pymssql"]
mssql_pyodbc = ["pyodbc"]
mysql = ["mysqlclient"]
oracle = ["cx-oracle"]
postgresql = ["psycopg2"]
postgresql_pg8000 = ["pg8000"]
postgresql_psycopg2binary = ["psycopg2-binary"]
postgresql_psycopg2cffi = ["psycopg2cffi"]
pymysql = ["pymysql"]
[[package]]
category = "main"
description = "The little ASGI library that shines."
name = "starlette"
optional = false
python-versions = ">=3.6"
version = "0.12.13"
[package.extras]
full = ["aiofiles", "graphene", "itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests", "ujson"]
[[package]]
category = "main"
description = "Python Library for Tom's Obvious, Minimal Language"
name = "toml"
optional = false
python-versions = "*"
version = "0.10.0"
[[package]]
category = "main"
description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
name = "tornado"
optional = false
python-versions = ">= 3.5"
version = "6.0.3"
[[package]] [[package]]
category = "main" category = "main"
description = "tzinfo object for the local timezone" description = "tzinfo object for the local timezone"
@ -185,11 +470,102 @@ version = "2.0.0"
[package.dependencies] [package.dependencies]
pytz = "*" pytz = "*"
[[package]]
category = "main"
description = "HTTP library with thread-safe connection pooling, file post, and more."
name = "urllib3"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4"
version = "1.25.7"
[package.extras]
brotli = ["brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
[[package]]
category = "main"
description = "The lightning-fast ASGI server."
name = "uvicorn"
optional = false
python-versions = "*"
version = "0.10.8"
[package.dependencies]
click = ">=7.0.0,<8.0.0"
h11 = ">=0.8.0,<0.9.0"
httptools = "0.0.13"
uvloop = ">=0.14.0"
websockets = ">=8.0.0,<9.0.0"
[[package]]
category = "main"
description = "Fast implementation of asyncio event loop on top of libuv"
marker = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"pypy\""
name = "uvloop"
optional = false
python-versions = "*"
version = "0.14.0"
[[package]]
category = "main"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
name = "websockets"
optional = false
python-versions = ">=3.6.1"
version = "8.1"
[[package]]
category = "main"
description = "Yet another URL library"
name = "yarl"
optional = false
python-versions = ">=3.5.3"
version = "1.3.0"
[package.dependencies]
idna = ">=2.0"
multidict = ">=4.0"
[[package]]
category = "main"
description = "YouTube video downloader"
name = "youtube-dl"
optional = false
python-versions = "*"
version = "2019.11.22"
[metadata] [metadata]
content-hash = "817fb50e91869e1dcee16160a92126fd5e4af4186990bf8fecf2523a9109f5fa" content-hash = "e358039cf58db05d50f73138e8b431bcbe8476bc60181233645f2064ee496023"
python-versions = "^3.8" python-versions = "^3.8"
[metadata.files] [metadata.files]
aiohttp = [
{file = "aiohttp-3.6.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e"},
{file = "aiohttp-3.6.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec"},
{file = "aiohttp-3.6.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48"},
{file = "aiohttp-3.6.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59"},
{file = "aiohttp-3.6.2-cp36-cp36m-win32.whl", hash = "sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a"},
{file = "aiohttp-3.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17"},
{file = "aiohttp-3.6.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a"},
{file = "aiohttp-3.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd"},
{file = "aiohttp-3.6.2-cp37-cp37m-win32.whl", hash = "sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965"},
{file = "aiohttp-3.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654"},
{file = "aiohttp-3.6.2-py3-none-any.whl", hash = "sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4"},
{file = "aiohttp-3.6.2.tar.gz", hash = "sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326"},
]
async-timeout = [
{file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"},
{file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"},
]
attrs = [
{file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"},
{file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"},
]
certifi = [
{file = "certifi-2019.9.11-py2.py3-none-any.whl", hash = "sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef"},
{file = "certifi-2019.9.11.tar.gz", hash = "sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50"},
]
cffi = [ cffi = [
{file = "cffi-1.13.2-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43"}, {file = "cffi-1.13.2-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43"},
{file = "cffi-1.13.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396"}, {file = "cffi-1.13.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396"},
@ -225,6 +601,22 @@ cffi = [
{file = "cffi-1.13.2-cp38-cp38-win_amd64.whl", hash = "sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba"}, {file = "cffi-1.13.2-cp38-cp38-win_amd64.whl", hash = "sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba"},
{file = "cffi-1.13.2.tar.gz", hash = "sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346"}, {file = "cffi-1.13.2.tar.gz", hash = "sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346"},
] ]
chardet = [
{file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"},
{file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"},
]
click = [
{file = "Click-7.0-py2.py3-none-any.whl", hash = "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13"},
{file = "Click-7.0.tar.gz", hash = "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"},
]
colorama = [
{file = "colorama-0.4.1-py2.py3-none-any.whl", hash = "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"},
{file = "colorama-0.4.1.tar.gz", hash = "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d"},
]
coloredlogs = [
{file = "coloredlogs-10.0-py2.py3-none-any.whl", hash = "sha256:34fad2e342d5a559c31b6c889e8d14f97cb62c47d9a2ae7b5ed14ea10a79eff8"},
{file = "coloredlogs-10.0.tar.gz", hash = "sha256:b869a2dda3fa88154b9dd850e27828d8755bfab5a838a1c97fbc850c6e377c36"},
]
cryptography = [ cryptography = [
{file = "cryptography-2.8-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8"}, {file = "cryptography-2.8-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8"},
{file = "cryptography-2.8-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2"}, {file = "cryptography-2.8-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2"},
@ -252,33 +644,125 @@ dateparser = [
{file = "dateparser-0.7.2-py2.py3-none-any.whl", hash = "sha256:983d84b5e3861cb0aa240cad07f12899bb10b62328aae188b9007e04ce37d665"}, {file = "dateparser-0.7.2-py2.py3-none-any.whl", hash = "sha256:983d84b5e3861cb0aa240cad07f12899bb10b62328aae188b9007e04ce37d665"},
{file = "dateparser-0.7.2.tar.gz", hash = "sha256:e1eac8ef28de69a554d5fcdb60b172d526d61924b1a40afbbb08df459a36006b"}, {file = "dateparser-0.7.2.tar.gz", hash = "sha256:e1eac8ef28de69a554d5fcdb60b172d526d61924b1a40afbbb08df459a36006b"},
] ]
entrypoints = [ "discord.py" = []
{file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, ffmpeg-python = [
{file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, {file = "ffmpeg-python-0.2.0.tar.gz", hash = "sha256:65225db34627c578ef0e11c8b1eb528bb35e024752f6f10b78c011f6f64c4127"},
{file = "ffmpeg_python-0.2.0-py3-none-any.whl", hash = "sha256:ac441a0404e053f8b6a1113a77c0f452f1cfc62f6344a769475ffdc0f56c23c5"},
] ]
jeepney = [ future = [
{file = "jeepney-0.4.1-py3-none-any.whl", hash = "sha256:f6a3f93464a0cf052f4e87da3c8b3ed1e27696758fb9739c63d3a74d9a1b6774"}, {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"},
{file = "jeepney-0.4.1.tar.gz", hash = "sha256:13806f91a96e9b2623fd2a81b950d763ee471454aafd9eb6d75dbe7afce428fb"},
] ]
keyring = [ h11 = [
{file = "keyring-19.2.0-py2.py3-none-any.whl", hash = "sha256:f5bb20ea6c57c2360daf0c591931c9ea0d7660a8d9e32ca84d63273f131ea605"}, {file = "h11-0.8.1-py2.py3-none-any.whl", hash = "sha256:f2b1ca39bfed357d1f19ac732913d5f9faa54a5062eca7d2ec3a916cfb7ae4c7"},
{file = "keyring-19.2.0.tar.gz", hash = "sha256:91037ccaf0c9a112a76f7740e4a416b9457a69b66c2799421581bee710a974b3"}, {file = "h11-0.8.1.tar.gz", hash = "sha256:acca6a44cb52a32ab442b1779adf0875c443c689e9e028f8d831a3769f9c5208"},
]
httptools = [
{file = "httptools-0.0.13.tar.gz", hash = "sha256:e00cbd7ba01ff748e494248183abc6e153f49181169d8a3d41bb49132ca01dfc"},
]
humanfriendly = [
{file = "humanfriendly-4.18-py2.py3-none-any.whl", hash = "sha256:23057b10ad6f782e7bc3a20e3cb6768ab919f619bbdc0dd75691121bbde5591d"},
{file = "humanfriendly-4.18.tar.gz", hash = "sha256:33ee8ceb63f1db61cce8b5c800c531e1a61023ac5488ccde2ba574a85be00a85"},
]
idna = [
{file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"},
{file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"},
]
multidict = [
{file = "multidict-4.6.1-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:318aadf1cfb6741c555c7dd83d94f746dc95989f4f106b25b8a83dfb547f2756"},
{file = "multidict-4.6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9c890978e2b37dd0dc1bd952da9a5d9f245d4807bee33e3517e4119c48d66f8c"},
{file = "multidict-4.6.1-cp35-cp35m-win32.whl", hash = "sha256:efaf1b18ea6c1f577b1371c0159edbe4749558bfe983e13aa24d0a0c01e1ad7b"},
{file = "multidict-4.6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:07f9a6bf75ad675d53956b2c6a2d4ef2fa63132f33ecc99e9c24cf93beb0d10b"},
{file = "multidict-4.6.1-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:42cdd649741a14b0602bf15985cad0dd4696a380081a3319cd1ead46fd0f0fab"},
{file = "multidict-4.6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:205a011e636d885af6dd0029e41e3514a46e05bb2a43251a619a6e8348b96fc0"},
{file = "multidict-4.6.1-cp36-cp36m-win32.whl", hash = "sha256:cfec9d001a83dc73580143f3c77e898cf7ad78b27bb5e64dbe9652668fcafec7"},
{file = "multidict-4.6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8d919034420378132d074bf89df148d0193e9780c9fe7c0e495e895b8af4d8a2"},
{file = "multidict-4.6.1-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:a37433ce8cdb35fc9e6e47e1606fa1bfd6d70440879038dca7d8dd023197eaa9"},
{file = "multidict-4.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1b605272c558e4c659dbaf0fb32a53bfede44121bcf77b356e6e906867b958b7"},
{file = "multidict-4.6.1-cp37-cp37m-win32.whl", hash = "sha256:891b7e142885e17a894d9d22b0349b92bb2da4769b4e675665d0331c08719be5"},
{file = "multidict-4.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:250632316295f2311e1ed43e6b26a63b0216b866b45c11441886ac1543ca96e1"},
{file = "multidict-4.6.1-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:2bc9c2579312c68a3552ee816311c8da76412e6f6a9cf33b15152e385a572d2a"},
{file = "multidict-4.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0ffe4d4d28cbe9801952bfb52a8095dd9ffecebd93f84bdf973c76300de783c5"},
{file = "multidict-4.6.1-cp38-cp38-win32.whl", hash = "sha256:87e26d8b89127c25659e962c61a4c655ec7445d19150daea0759516884ecb8b4"},
{file = "multidict-4.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:c626029841ada34c030b94a00c573a0c7575fe66489cde148785b6535397d675"},
{file = "multidict-4.6.1.tar.gz", hash = "sha256:5159c4975931a1a78bf6602bbebaa366747fce0a56cb2111f44789d2c45e379f"},
]
psycopg2-binary = [
{file = "psycopg2-binary-2.8.4.tar.gz", hash = "sha256:3a2522b1d9178575acee4adf8fd9f979f9c0449b00b4164bb63c3475ea6528ed"},
{file = "psycopg2_binary-2.8.4-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:890167d5091279a27e2505ff0e1fb273f8c48c41d35c5b92adbf4af80e6b2ed6"},
{file = "psycopg2_binary-2.8.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:dbc5cd56fff1a6152ca59445178652756f4e509f672e49ccdf3d79c1043113a4"},
{file = "psycopg2_binary-2.8.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:7f42a8490c4fe854325504ce7a6e4796b207960dabb2cbafe3c3959cb00d1d7e"},
{file = "psycopg2_binary-2.8.4-cp27-cp27m-win32.whl", hash = "sha256:8578d6b8192e4c805e85f187bc530d0f52ba86c39172e61cd51f68fddd648103"},
{file = "psycopg2_binary-2.8.4-cp27-cp27m-win_amd64.whl", hash = "sha256:5dd90c5438b4f935c9d01fcbad3620253da89d19c1f5fca9158646407ed7df35"},
{file = "psycopg2_binary-2.8.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9aadff9032e967865f9778485571e93908d27dab21d0fdfdec0ca779bb6f8ad9"},
{file = "psycopg2_binary-2.8.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:659c815b5b8e2a55193ede2795c1e2349b8011497310bb936da7d4745652823b"},
{file = "psycopg2_binary-2.8.4-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:2166e770cb98f02ed5ee2b0b569d40db26788e0bf2ec3ae1a0d864ea6f1d8309"},
{file = "psycopg2_binary-2.8.4-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:7e6e3c52e6732c219c07bd97fff6c088f8df4dae3b79752ee3a817e6f32e177e"},
{file = "psycopg2_binary-2.8.4-cp34-cp34m-win32.whl", hash = "sha256:040234f8a4a8dfd692662a8308d78f63f31a97e1c42d2480e5e6810c48966a29"},
{file = "psycopg2_binary-2.8.4-cp34-cp34m-win_amd64.whl", hash = "sha256:69b13fdf12878b10dc6003acc8d0abf3ad93e79813fd5f3812497c1c9fb9be49"},
{file = "psycopg2_binary-2.8.4-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:19dc39616850342a2a6db70559af55b22955f86667b5f652f40c0e99253d9881"},
{file = "psycopg2_binary-2.8.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:9f24f383a298a0c0f9b3113b982e21751a8ecde6615494a3f1470eb4a9d70e9e"},
{file = "psycopg2_binary-2.8.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:eaed1c65f461a959284649e37b5051224f4db6ebdc84e40b5e65f2986f101a08"},
{file = "psycopg2_binary-2.8.4-cp35-cp35m-win32.whl", hash = "sha256:4c6717962247445b4f9e21c962ea61d2e884fc17df5ddf5e35863b016f8a1f03"},
{file = "psycopg2_binary-2.8.4-cp35-cp35m-win_amd64.whl", hash = "sha256:84156313f258eafff716b2961644a4483a9be44a5d43551d554844d15d4d224e"},
{file = "psycopg2_binary-2.8.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3b5deaa3ee7180585a296af33e14c9b18c218d148e735c7accf78130765a47e3"},
{file = "psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5057669b6a66aa9ca118a2a860159f0ee3acf837eda937bdd2a64f3431361a2d"},
{file = "psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:afd96845e12638d2c44d213d4810a08f4dc4a563f9a98204b7428e567014b1cd"},
{file = "psycopg2_binary-2.8.4-cp36-cp36m-win32.whl", hash = "sha256:a73021b44813b5c84eda4a3af5826dd72356a900bac9bd9dd1f0f81ee1c22c2f"},
{file = "psycopg2_binary-2.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:407af6d7e46593415f216c7f56ba087a9a42bd6dc2ecb86028760aa45b802bd7"},
{file = "psycopg2_binary-2.8.4-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3aa773580f85a28ffdf6f862e59cb5a3cc7ef6885121f2de3fca8d6ada4dbf3b"},
{file = "psycopg2_binary-2.8.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:eac8a3499754790187bb00574ab980df13e754777d346f85e0ff6df929bcd964"},
{file = "psycopg2_binary-2.8.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7a1cb80e35e1ccea3e11a48afe65d38744a0e0bde88795cc56a4d05b6e4f9d70"},
{file = "psycopg2_binary-2.8.4-cp37-cp37m-win32.whl", hash = "sha256:086f7e89ec85a6704db51f68f0dcae432eff9300809723a6e8782c41c2f48e03"},
{file = "psycopg2_binary-2.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:b73ddf033d8cd4cc9dfed6324b1ad2a89ba52c410ef6877998422fcb9c23e3a8"},
{file = "psycopg2_binary-2.8.4-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:4c3c09fb674401f630626310bcaf6cd6285daf0d5e4c26d6e55ca26a2734e39b"},
{file = "psycopg2_binary-2.8.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:18ca813fdb17bc1db73fe61b196b05dd1ca2165b884dd5ec5568877cabf9b039"},
{file = "psycopg2_binary-2.8.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:50446fae5681fc99f87e505d4e77c9407e683ab60c555ec302f9ac9bffa61103"},
{file = "psycopg2_binary-2.8.4-cp38-cp38-win32.whl", hash = "sha256:98e10634792ac0e9e7a92a76b4991b44c2325d3e7798270a808407355e7bb0a1"},
{file = "psycopg2_binary-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:b8f490f5fad1767a1331df1259763b3bad7d7af12a75b950c2843ba319b2415f"},
] ]
pycparser = [ pycparser = [
{file = "pycparser-2.19.tar.gz", hash = "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"}, {file = "pycparser-2.19.tar.gz", hash = "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"},
] ]
pynacl = [
{file = "PyNaCl-1.3.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:2424c8b9f41aa65bbdbd7a64e73a7450ebb4aa9ddedc6a081e7afcc4c97f7621"},
{file = "PyNaCl-1.3.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:30f36a9c70450c7878053fa1344aca0145fd47d845270b43a7ee9192a051bf39"},
{file = "PyNaCl-1.3.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:05c26f93964373fc0abe332676cb6735f0ecad27711035b9472751faa8521255"},
{file = "PyNaCl-1.3.0-cp27-cp27m-win32.whl", hash = "sha256:a14e499c0f5955dcc3991f785f3f8e2130ed504fa3a7f44009ff458ad6bdd17f"},
{file = "PyNaCl-1.3.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f67814c38162f4deb31f68d590771a29d5ae3b1bd64b75cf232308e5c74777e0"},
{file = "PyNaCl-1.3.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:e2da3c13307eac601f3de04887624939aca8ee3c9488a0bb0eca4fb9401fc6b1"},
{file = "PyNaCl-1.3.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0d0a8171a68edf51add1e73d2159c4bc19fc0718e79dec51166e940856c2f28e"},
{file = "PyNaCl-1.3.0-cp34-abi3-macosx_10_6_intel.whl", hash = "sha256:4943decfc5b905748f0756fdd99d4f9498d7064815c4cf3643820c9028b711d1"},
{file = "PyNaCl-1.3.0-cp34-abi3-manylinux1_i686.whl", hash = "sha256:5bd61e9b44c543016ce1f6aef48606280e45f892a928ca7068fba30021e9b786"},
{file = "PyNaCl-1.3.0-cp34-abi3-manylinux1_x86_64.whl", hash = "sha256:aabb0c5232910a20eec8563503c153a8e78bbf5459490c49ab31f6adf3f3a415"},
{file = "PyNaCl-1.3.0-cp34-cp34m-win32.whl", hash = "sha256:7d3ce02c0784b7cbcc771a2da6ea51f87e8716004512493a2b69016326301c3b"},
{file = "PyNaCl-1.3.0-cp34-cp34m-win_amd64.whl", hash = "sha256:1c780712b206317a746ace34c209b8c29dbfd841dfbc02aa27f2084dd3db77ae"},
{file = "PyNaCl-1.3.0-cp35-cp35m-win32.whl", hash = "sha256:37aa336a317209f1bb099ad177fef0da45be36a2aa664507c5d72015f956c310"},
{file = "PyNaCl-1.3.0-cp35-cp35m-win_amd64.whl", hash = "sha256:57ef38a65056e7800859e5ba9e6091053cd06e1038983016effaffe0efcd594a"},
{file = "PyNaCl-1.3.0-cp36-cp36m-win32.whl", hash = "sha256:a39f54ccbcd2757d1d63b0ec00a00980c0b382c62865b61a505163943624ab20"},
{file = "PyNaCl-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6482d3017a0c0327a49dddc8bd1074cc730d45db2ccb09c3bac1f8f32d1eb61b"},
{file = "PyNaCl-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:2d23c04e8d709444220557ae48ed01f3f1086439f12dbf11976e849a4926db56"},
{file = "PyNaCl-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bd4ecb473a96ad0f90c20acba4f0bf0df91a4e03a1f4dd6a4bdc9ca75aa3a715"},
{file = "PyNaCl-1.3.0-cp38-cp38-win32.whl", hash = "sha256:53126cd91356342dcae7e209f840212a58dcf1177ad52c1d938d428eebc9fee5"},
{file = "PyNaCl-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:bf459128feb543cfca16a95f8da31e2e65e4c5257d2f3dfa8c0c1031139c9c92"},
{file = "PyNaCl-1.3.0.tar.gz", hash = "sha256:0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c"},
]
pyreadline = [
{file = "pyreadline-2.1.win-amd64.exe", hash = "sha256:9ce5fa65b8992dfa373bddc5b6e0864ead8f291c94fbfec05fbd5c836162e67b"},
{file = "pyreadline-2.1.win32.exe", hash = "sha256:65540c21bfe14405a3a77e4c085ecfce88724743a4ead47c66b84defcf82c32e"},
{file = "pyreadline-2.1.zip", hash = "sha256:4530592fc2e85b25b1a9f79664433da09237c1a270e4d78ea5aa3a2c7229e2d1"},
]
python-dateutil = [ python-dateutil = [
{file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"},
{file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"},
] ]
python-telegram-bot = [
{file = "python-telegram-bot-12.2.0.tar.gz", hash = "sha256:346d42771c2b23384c59f5f41e05bd7e801a0ce118d8dcb95209bb73d5f694c5"},
{file = "python_telegram_bot-12.2.0-py2.py3-none-any.whl", hash = "sha256:3beee89cba3bc3217566c96199f04776dd25f541ac8992da27fd247b2d208a14"},
]
pytz = [ pytz = [
{file = "pytz-2019.3-py2.py3-none-any.whl", hash = "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d"}, {file = "pytz-2019.3-py2.py3-none-any.whl", hash = "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d"},
{file = "pytz-2019.3.tar.gz", hash = "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"}, {file = "pytz-2019.3.tar.gz", hash = "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"},
] ]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
{file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
]
regex = [ regex = [
{file = "regex-2019.11.1-cp27-none-win32.whl", hash = "sha256:604dc563a02a74d70ae1f55208ddc9bfb6d9f470f6d1a5054c4bd5ae58744ab1"}, {file = "regex-2019.11.1-cp27-none-win32.whl", hash = "sha256:604dc563a02a74d70ae1f55208ddc9bfb6d9f470f6d1a5054c4bd5ae58744ab1"},
{file = "regex-2019.11.1-cp27-none-win_amd64.whl", hash = "sha256:5e00f65cc507d13ab4dfa92c1232d004fa202c1d43a32a13940ab8a5afe2fb96"}, {file = "regex-2019.11.1-cp27-none-win_amd64.whl", hash = "sha256:5e00f65cc507d13ab4dfa92c1232d004fa202c1d43a32a13940ab8a5afe2fb96"},
@ -294,18 +778,84 @@ regex = [
{file = "regex-2019.11.1-cp38-none-win_amd64.whl", hash = "sha256:c7393597191fc2043c744db021643549061e12abe0b3ff5c429d806de7b93b66"}, {file = "regex-2019.11.1-cp38-none-win_amd64.whl", hash = "sha256:c7393597191fc2043c744db021643549061e12abe0b3ff5c429d806de7b93b66"},
{file = "regex-2019.11.1.tar.gz", hash = "sha256:720e34a539a76a1fedcebe4397290604cc2bdf6f81eca44adb9fb2ea071c0c69"}, {file = "regex-2019.11.1.tar.gz", hash = "sha256:720e34a539a76a1fedcebe4397290604cc2bdf6f81eca44adb9fb2ea071c0c69"},
] ]
royalnet = [ royalnet = []
{file = "royalnet-5.1a1.tar.gz", hash = "sha256:25664a477ed94abeae919a503e37cdf546dc4ed63e6709d3868aeb87fd7dfe43"}, sentry-sdk = [
] {file = "sentry-sdk-0.13.4.tar.gz", hash = "sha256:bfc486af718c268cf49ff43d6334ed4db7333ace420240b630acdd8f8a3a8f60"},
secretstorage = [ {file = "sentry_sdk-0.13.4-py2.py3-none-any.whl", hash = "sha256:a7c2c8d3f53b6b57454830cd6a4b73d272f1ba91952f59e6545b3cf885f3c22f"},
{file = "SecretStorage-3.1.1-py3-none-any.whl", hash = "sha256:7a119fb52a88e398dbb22a4b3eb39b779bfbace7e4153b7bc6e5954d86282a8a"},
{file = "SecretStorage-3.1.1.tar.gz", hash = "sha256:20c797ae48a4419f66f8d28fc221623f11fc45b6828f96bdb1ad9990acb59f92"},
] ]
six = [ six = [
{file = "six-1.13.0-py2.py3-none-any.whl", hash = "sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd"}, {file = "six-1.13.0-py2.py3-none-any.whl", hash = "sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd"},
{file = "six-1.13.0.tar.gz", hash = "sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"}, {file = "six-1.13.0.tar.gz", hash = "sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"},
] ]
sqlalchemy = [
{file = "SQLAlchemy-1.3.11.tar.gz", hash = "sha256:afa5541e9dea8ad0014251bc9d56171ca3d8b130c9627c6cb3681cff30be3f8a"},
]
starlette = [
{file = "starlette-0.12.13.tar.gz", hash = "sha256:9597bc28e3c4659107c1c4a45ec32dc45e947d78fe56230222be673b2c36454a"},
]
toml = [
{file = "toml-0.10.0-py2.7.egg", hash = "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"},
{file = "toml-0.10.0-py2.py3-none-any.whl", hash = "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"},
{file = "toml-0.10.0.tar.gz", hash = "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"},
]
tornado = [
{file = "tornado-6.0.3-cp35-cp35m-win32.whl", hash = "sha256:c9399267c926a4e7c418baa5cbe91c7d1cf362d505a1ef898fde44a07c9dd8a5"},
{file = "tornado-6.0.3-cp35-cp35m-win_amd64.whl", hash = "sha256:398e0d35e086ba38a0427c3b37f4337327231942e731edaa6e9fd1865bbd6f60"},
{file = "tornado-6.0.3-cp36-cp36m-win32.whl", hash = "sha256:4e73ef678b1a859f0cb29e1d895526a20ea64b5ffd510a2307b5998c7df24281"},
{file = "tornado-6.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:349884248c36801afa19e342a77cc4458caca694b0eda633f5878e458a44cb2c"},
{file = "tornado-6.0.3-cp37-cp37m-win32.whl", hash = "sha256:559bce3d31484b665259f50cd94c5c28b961b09315ccd838f284687245f416e5"},
{file = "tornado-6.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:abbe53a39734ef4aba061fca54e30c6b4639d3e1f59653f0da37a0003de148c7"},
{file = "tornado-6.0.3.tar.gz", hash = "sha256:c845db36ba616912074c5b1ee897f8e0124df269468f25e4fe21fe72f6edd7a9"},
]
tzlocal = [ tzlocal = [
{file = "tzlocal-2.0.0-py2.py3-none-any.whl", hash = "sha256:11c9f16e0a633b4b60e1eede97d8a46340d042e67b670b290ca526576e039048"}, {file = "tzlocal-2.0.0-py2.py3-none-any.whl", hash = "sha256:11c9f16e0a633b4b60e1eede97d8a46340d042e67b670b290ca526576e039048"},
{file = "tzlocal-2.0.0.tar.gz", hash = "sha256:949b9dd5ba4be17190a80c0268167d7e6c92c62b30026cf9764caf3e308e5590"}, {file = "tzlocal-2.0.0.tar.gz", hash = "sha256:949b9dd5ba4be17190a80c0268167d7e6c92c62b30026cf9764caf3e308e5590"},
] ]
urllib3 = [
{file = "urllib3-1.25.7-py2.py3-none-any.whl", hash = "sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293"},
{file = "urllib3-1.25.7.tar.gz", hash = "sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745"},
]
uvicorn = [
{file = "uvicorn-0.10.8.tar.gz", hash = "sha256:f4c34642618449f55e2bab8c6b22ff7615b520d2e7e23275be2ca894254327a3"},
]
uvloop = [
{file = "uvloop-0.14.0-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd"},
{file = "uvloop-0.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4544dcf77d74f3a84f03dd6278174575c44c67d7165d4c42c71db3fdc3860726"},
{file = "uvloop-0.14.0-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:b4f591aa4b3fa7f32fb51e2ee9fea1b495eb75b0b3c8d0ca52514ad675ae63f7"},
{file = "uvloop-0.14.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f07909cd9fc08c52d294b1570bba92186181ca01fe3dc9ffba68955273dd7362"},
{file = "uvloop-0.14.0-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:afd5513c0ae414ec71d24f6f123614a80f3d27ca655a4fcf6cabe50994cc1891"},
{file = "uvloop-0.14.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:e7514d7a48c063226b7d06617cbb12a14278d4323a065a8d46a7962686ce2e95"},
{file = "uvloop-0.14.0-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:bcac356d62edd330080aed082e78d4b580ff260a677508718f88016333e2c9c5"},
{file = "uvloop-0.14.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:4315d2ec3ca393dd5bc0b0089d23101276778c304d42faff5dc4579cb6caef09"},
{file = "uvloop-0.14.0.tar.gz", hash = "sha256:123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e"},
]
websockets = [
{file = "websockets-8.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:3762791ab8b38948f0c4d281c8b2ddfa99b7e510e46bd8dfa942a5fff621068c"},
{file = "websockets-8.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:3db87421956f1b0779a7564915875ba774295cc86e81bc671631379371af1170"},
{file = "websockets-8.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4f9f7d28ce1d8f1295717c2c25b732c2bc0645db3215cf757551c392177d7cb8"},
{file = "websockets-8.1-cp36-cp36m-win32.whl", hash = "sha256:2db62a9142e88535038a6bcfea70ef9447696ea77891aebb730a333a51ed559a"},
{file = "websockets-8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:0e4fb4de42701340bd2353bb2eee45314651caa6ccee80dbd5f5d5978888fed5"},
{file = "websockets-8.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:9b248ba3dd8a03b1a10b19efe7d4f7fa41d158fdaa95e2cf65af5a7b95a4f989"},
{file = "websockets-8.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ce85b06a10fc65e6143518b96d3dca27b081a740bae261c2fb20375801a9d56d"},
{file = "websockets-8.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:965889d9f0e2a75edd81a07592d0ced54daa5b0785f57dc429c378edbcffe779"},
{file = "websockets-8.1-cp37-cp37m-win32.whl", hash = "sha256:7ff46d441db78241f4c6c27b3868c9ae71473fe03341340d2dfdbe8d79310acc"},
{file = "websockets-8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:20891f0dddade307ffddf593c733a3fdb6b83e6f9eef85908113e628fa5a8308"},
{file = "websockets-8.1.tar.gz", hash = "sha256:5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f"},
]
yarl = [
{file = "yarl-1.3.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320"},
{file = "yarl-1.3.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb"},
{file = "yarl-1.3.0-cp35-cp35m-win32.whl", hash = "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829"},
{file = "yarl-1.3.0-cp35-cp35m-win_amd64.whl", hash = "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310"},
{file = "yarl-1.3.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f"},
{file = "yarl-1.3.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842"},
{file = "yarl-1.3.0-cp36-cp36m-win32.whl", hash = "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8"},
{file = "yarl-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4"},
{file = "yarl-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1"},
{file = "yarl-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0"},
{file = "yarl-1.3.0.tar.gz", hash = "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9"},
]
youtube-dl = [
{file = "youtube_dl-2019.11.22-py2.py3-none-any.whl", hash = "sha256:bd785113687f201415389156664b9ebd81698fb6eb44c6d9fd35898619e27bf7"},
{file = "youtube_dl-2019.11.22.tar.gz", hash = "sha256:0575efd332cb9817f5a1fffd2a1e569e5a7d3642e7c24c7a5c47cbf70f301f25"},
]

View file

@ -19,7 +19,20 @@
# Library dependencies # Library dependencies
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.8" python = "^3.8"
royalnet = {path="../royalnet/dist/royalnet-5.1a1.tar.gz"}
[tool.poetry.dependencies.royalnet]
git = "https://github.com/Steffo99/royalnet/"
# Maybe... there is a way to make these selectable?
extras = [
"telegram",
"discord",
"alchemy_easy",
"bard",
"constellation",
"sentry",
"herald",
"coloredlogs"
]
# Development dependencies # Development dependencies
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]

View file

@ -1,7 +0,0 @@
royalnet>=5.0a1
starlette>=0.12.13
aiohttp>=3.6.2
sqlalchemy>=1.3.10
dateparser>=0.7.2
python_telegram_bot>=12.2.0
wheel>=0.33.6

View file

@ -1,17 +1,19 @@
# This is a template Pack __init__. You can use this without changing anything in other packages too! # This is a template Pack __init__. You can use this without changing anything in other packages too!
from . import commands, tables, stars, version from . import commands, tables, stars, events
from .commands import available_commands from .commands import available_commands
from .tables import available_tables from .tables import available_tables
from .stars import available_page_stars, available_exception_stars from .stars import available_page_stars, available_exception_stars
from .events import available_events
__all__ = [ __all__ = [
"commands", "commands",
"tables", "tables",
"stars", "stars",
"version", "events",
"available_commands", "available_commands",
"available_tables", "available_tables",
"available_page_stars", "available_page_stars",
"available_exception_stars", "available_exception_stars",
"available_events",
] ]

View file

@ -1,56 +1,56 @@
# Imports go here! # Imports go here!
from .ciaoruozi import CiaoruoziCommand from .ciaoruozi import CiaoruoziCommand
from .color import ColorCommand from .color import ColorCommand
from .cv import CvCommand # from .cv import CvCommand
from .diario import DiarioCommand from .diario import DiarioCommand
from .rage import RageCommand # from .rage import RageCommand
from .reminder import ReminderCommand # from .reminder import ReminderCommand
from .ship import ShipCommand # from .ship import ShipCommand
from .smecds import SmecdsCommand # from .smecds import SmecdsCommand
from .videochannel import VideochannelCommand # from .videochannel import VideochannelCommand
from .trivia import TriviaCommand # from .trivia import TriviaCommand
from .matchmaking import MatchmakingCommand # from .matchmaking import MatchmakingCommand
from .pause import PauseCommand # from .pause import PauseCommand
from .play import PlayCommand # from .play import PlayCommand
from .playmode import PlaymodeCommand # from .playmode import PlaymodeCommand
from .queue import QueueCommand # from .queue import QueueCommand
from .skip import SkipCommand # from .skip import SkipCommand
from .summon import SummonCommand # from .summon import SummonCommand
from .youtube import YoutubeCommand # from .youtube import YoutubeCommand
from .soundcloud import SoundcloudCommand # from .soundcloud import SoundcloudCommand
from .zawarudo import ZawarudoCommand # from .zawarudo import ZawarudoCommand
from .emojify import EmojifyCommand from .emojify import EmojifyCommand
from .leagueoflegends import LeagueoflegendsCommand # from .leagueoflegends import LeagueoflegendsCommand
from .diarioquote import DiarioquoteCommand from .diarioquote import DiarioquoteCommand
from .mp3 import Mp3Command # from .mp3 import Mp3Command
from .peertube import PeertubeCommand from .peertube import PeertubeCommand
# Enter the commands of your Pack here! # Enter the commands of your Pack here!
available_commands = [ available_commands = [
CiaoruoziCommand, CiaoruoziCommand,
ColorCommand, ColorCommand,
CvCommand, # CvCommand,
DiarioCommand, DiarioCommand,
RageCommand, # RageCommand,
ReminderCommand, # ReminderCommand,
ShipCommand, # ShipCommand,
SmecdsCommand, # SmecdsCommand,
VideochannelCommand, # VideochannelCommand,
TriviaCommand, # TriviaCommand,
MatchmakingCommand, # MatchmakingCommand,
PauseCommand, # PauseCommand,
PlayCommand, # PlayCommand,
PlaymodeCommand, # PlaymodeCommand,
QueueCommand, # QueueCommand,
SkipCommand, # SkipCommand,
SummonCommand, # SummonCommand,
YoutubeCommand, # YoutubeCommand,
SoundcloudCommand, # SoundcloudCommand,
ZawarudoCommand, # ZawarudoCommand,
EmojifyCommand, EmojifyCommand,
LeagueoflegendsCommand, # LeagueoflegendsCommand,
DiarioquoteCommand, DiarioquoteCommand,
Mp3Command, # Mp3Command,
PeertubeCommand, PeertubeCommand,
] ]

View file

@ -1,4 +1,3 @@
import typing
import telegram import telegram
from royalnet.commands import * from royalnet.commands import *
@ -8,14 +7,11 @@ class CiaoruoziCommand(Command):
description: str = "Saluta Ruozi, un leggendario essere che una volta era in User Games." description: str = "Saluta Ruozi, un leggendario essere che una volta era in User Games."
syntax: str = ""
tables: typing.Set = set()
async def run(self, args: CommandArgs, data: CommandData) -> None: async def run(self, args: CommandArgs, data: CommandData) -> None:
if self.interface.name == "telegram": if self.interface.name == "telegram":
update: telegram.Update = data.update update: telegram.Update = data.update
user: telegram.User = update.effective_user user: telegram.User = update.effective_user
# Se sei Ruozi, salutati da solo!
if user.id == 112437036: if user.id == 112437036:
await data.reply("👋 Ciao me!") await data.reply("👋 Ciao me!")
return return

View file

@ -1,14 +1,15 @@
import typing
import re import re
import datetime import datetime
import telegram import telegram
import aiohttp import aiohttp
from typing import *
from royalnet.commands import * from royalnet.commands import *
from royalnet.utils import asyncify from royalnet.utils import asyncify
from ..tables import User, Diario, Alias from royalnet.backpack.tables import *
from ..tables import *
async def to_imgur(imgur_api_key, photosizes: typing.List[telegram.PhotoSize], caption="") -> str: async def to_imgur(imgur_api_key, photosizes: List[telegram.PhotoSize], caption="") -> str:
# Select the largest photo # Select the largest photo
largest_photo = sorted(photosizes, key=lambda p: p.width * p.height)[-1] largest_photo = sorted(photosizes, key=lambda p: p.width * p.height)[-1]
# Get the photo url # Get the photo url
@ -35,8 +36,6 @@ class DiarioCommand(Command):
syntax = "[!] \"{testo}\" --[autore], [contesto]" syntax = "[!] \"{testo}\" --[autore], [contesto]"
tables = {User, Diario, Alias}
async def run(self, args: CommandArgs, data: CommandData) -> None: async def run(self, args: CommandArgs, data: CommandData) -> None:
if self.interface.name == "telegram": if self.interface.name == "telegram":
update: telegram.Update = data.update update: telegram.Update = data.update
@ -44,15 +43,15 @@ class DiarioCommand(Command):
reply: telegram.Message = message.reply_to_message reply: telegram.Message = message.reply_to_message
creator = await data.get_author() creator = await data.get_author()
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
quoted: typing.Optional[str] quoted: Optional[str]
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
text: typing.Optional[str] text: Optional[str]
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
context: typing.Optional[str] context: Optional[str]
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
timestamp: datetime.datetime timestamp: datetime.datetime
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
media_url: typing.Optional[str] media_url: Optional[str]
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
spoiler: bool spoiler: bool
if creator is None: if creator is None:
@ -62,19 +61,19 @@ class DiarioCommand(Command):
# Get the message text # Get the message text
text = reply.text text = reply.text
# Check if there's an image associated with the reply # Check if there's an image associated with the reply
photosizes: typing.Optional[typing.List[telegram.PhotoSize]] = reply.photo photosizes: Optional[List[telegram.PhotoSize]] = reply.photo
if photosizes: if photosizes:
# Text is a caption # Text is a caption
text = reply.caption text = reply.caption
media_url = await to_imgur(self.interface.bot.get_secret("imgur"), media_url = await to_imgur(self.interface.cfg["Imgur"]["token"],
photosizes, text if text is not None else "") photosizes, text if text is not None else "")
else: else:
media_url = None media_url = None
# Ensure there is a text or an image # Ensure there is a text or an image
if not (text or media_url): if not (text or media_url):
raise InvalidInputError("Missing text.") raise InvalidInputError("Il messaggio a cui hai risposto non contiene testo o immagini.")
# Find the Royalnet account associated with the sender # Find the Royalnet account associated with the sender
quoted_tg = await asyncify(data.session.query(self.interface.alchemy.Telegram) quoted_tg = await asyncify(data.session.query(self.alchemy.get(Telegram))
.filter_by(tg_id=reply.from_user.id) .filter_by(tg_id=reply.from_user.id)
.one_or_none) .one_or_none)
quoted_account = quoted_tg.royal if quoted_tg is not None else None quoted_account = quoted_tg.royal if quoted_tg is not None else None
@ -92,9 +91,9 @@ class DiarioCommand(Command):
# Get the message text # Get the message text
raw_text = " ".join(args) raw_text = " ".join(args)
# Check if there's an image associated with the reply # Check if there's an image associated with the reply
photosizes: typing.Optional[typing.List[telegram.PhotoSize]] = message.photo photosizes: Optional[List[telegram.PhotoSize]] = message.photo
if photosizes: if photosizes:
media_url = await to_imgur(self.interface.bot.get_secret("imgur"), media_url = await to_imgur(self.interface.cfg["Imgur"]["token"],
photosizes, raw_text if raw_text is not None else "") photosizes, raw_text if raw_text is not None else "")
else: else:
media_url = None media_url = None
@ -124,8 +123,9 @@ class DiarioCommand(Command):
# Find if there's a Royalnet account associated with the quoted name # Find if there's a Royalnet account associated with the quoted name
if quoted is not None: if quoted is not None:
quoted_alias = await asyncify( quoted_alias = await asyncify(
data.session.query(self.interface.alchemy.Alias) data.session.query(self.alchemy.get(Alias))
.filter_by(alias=quoted.lower()).one_or_none) .filter_by(alias=quoted.lower()).one_or_none
)
else: else:
quoted_alias = None quoted_alias = None
quoted_account = quoted_alias.royal if quoted_alias is not None else None quoted_account = quoted_alias.royal if quoted_alias is not None else None
@ -137,16 +137,16 @@ class DiarioCommand(Command):
context = None context = None
# Ensure there is a text or an image # Ensure there is a text or an image
if not (text or media_url): if not (text or media_url):
raise InvalidInputError("Missing text.") raise InvalidInputError("Manca il testo o l'immagine da inserire nel diario.")
# Create the diario quote # Create the diario quote
diario = self.interface.alchemy.Diario(creator=creator, diario = self.alchemy.get(Diario)(creator=creator,
quoted_account=quoted_account, quoted_account=quoted_account,
quoted=quoted, quoted=quoted,
text=text, text=text,
context=context, context=context,
timestamp=timestamp, timestamp=timestamp,
media_url=media_url, media_url=media_url,
spoiler=spoiler) spoiler=spoiler)
data.session.add(diario) data.session.add(diario)
await asyncify(data.session.commit) await asyncify(data.session.commit)
await data.reply(f"{str(diario)}") await data.reply(f"{str(diario)}")
@ -173,7 +173,7 @@ class DiarioCommand(Command):
timestamp = datetime.datetime.now() timestamp = datetime.datetime.now()
# Ensure there is some text # Ensure there is some text
if not text: if not text:
raise InvalidInputError("Missing text.") raise InvalidInputError("Manca il testo o l'immagine da inserire nel diario.")
# Or a quoted # Or a quoted
if not quoted: if not quoted:
quoted = None quoted = None
@ -182,25 +182,25 @@ class DiarioCommand(Command):
# Find if there's a Royalnet account associated with the quoted name # Find if there's a Royalnet account associated with the quoted name
if quoted is not None: if quoted is not None:
quoted_alias = await asyncify( quoted_alias = await asyncify(
data.session.query(self.interface.alchemy.Alias) data.session.query(self.alchemy.get(Alias))
.filter_by(alias=quoted.lower()) .filter_by(alias=quoted.lower())
.one_or_none) .one_or_none
)
else: else:
quoted_alias = None quoted_alias = None
quoted_account = quoted_alias.royal if quoted_alias is not None else None quoted_account = quoted_alias.royal if quoted_alias is not None else None
if quoted_alias is not None and quoted_account is None: if quoted_alias is not None and quoted_account is None:
await data.reply("⚠️ Il nome dell'autore è ambiguo, quindi la riga non è stata aggiunta.\n" raise UserError("Il nome dell'autore è ambiguo, quindi la riga non è stata aggiunta.\n"
"Per piacere, ripeti il comando con un nome più specifico!") "Per piacere, ripeti il comando con un nome più specifico!")
return
# Create the diario quote # Create the diario quote
diario = self.interface.alchemy.Diario(creator=creator, diario = self.alchemy.Diario(creator=creator,
quoted_account=quoted_account, quoted_account=quoted_account,
quoted=quoted, quoted=quoted,
text=text, text=text,
context=context, context=context,
timestamp=timestamp, timestamp=timestamp,
media_url=None, media_url=None,
spoiler=spoiler) spoiler=spoiler)
data.session.add(diario) data.session.add(diario)
await asyncify(data.session.commit) await asyncify(data.session.commit)
await data.reply(f"{str(diario)}") await data.reply(f"{str(diario)}")

View file

@ -12,14 +12,12 @@ class DiarioquoteCommand(Command):
syntax = "{id}" syntax = "{id}"
tables = {Diario}
async def run(self, args: CommandArgs, data: CommandData) -> None: async def run(self, args: CommandArgs, data: CommandData) -> None:
try: try:
entry_id = int(args[0].lstrip("#")) entry_id = int(args[0].lstrip("#"))
except ValueError: except ValueError:
raise CommandError("L'id che hai specificato non è valido.") raise CommandError("L'id che hai specificato non è valido.")
entry: Diario = await asyncify(data.session.query(self.alchemy.Diario).get, entry_id) entry: Diario = await asyncify(data.session.query(self.alchemy.get(Diario)).get, entry_id)
if entry is None: if entry is None:
raise CommandError("Nessuna riga con quell'id trovata.") raise CommandError("Nessuna riga con quell'id trovata.")
await data.reply(str(entry)) await data.reply(f" {entry}")

View file

@ -4,7 +4,7 @@ import datetime
import logging import logging
import dateparser import dateparser
from royalnet.commands import * from royalnet.commands import *
from royalnet.utils import telegram_escape from royalnet.serf.telegram.escape import escape
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -15,16 +15,10 @@ class PeertubeCommand(Command):
description: str = "Guarda quando è uscito l'ultimo video su RoyalTube." description: str = "Guarda quando è uscito l'ultimo video su RoyalTube."
_url = r"https://pt.steffo.eu/feeds/videos.json?sort=-publishedAt&filter=local"
_ready = asyncio.Event() _ready = asyncio.Event()
_timeout = 300
_latest_date: datetime.datetime = None _latest_date: datetime.datetime = None
_telegram_group_id = -1001153723135
def __init__(self, interface: CommandInterface): def __init__(self, interface: CommandInterface):
super().__init__(interface) super().__init__(interface)
if self.interface.name == "telegram": if self.interface.name == "telegram":
@ -34,7 +28,7 @@ class PeertubeCommand(Command):
async def _get_json(self): async def _get_json(self):
log.debug("Getting jsonfeed") log.debug("Getting jsonfeed")
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
async with session.get(self._url) as response: async with session.get(self.interface.cfg["Peertube"]["feed_url"]) as response:
log.debug("Parsing jsonfeed") log.debug("Parsing jsonfeed")
j = await response.json() j = await response.json()
log.debug("Jsonfeed parsed successfully") log.debug("Jsonfeed parsed successfully")
@ -43,15 +37,15 @@ class PeertubeCommand(Command):
async def _send(self, message): async def _send(self, message):
client = self.interface.bot.client client = self.interface.bot.client
await self.interface.bot.safe_api_call(client.send_message, await self.interface.bot.safe_api_call(client.send_message,
chat_id=self._telegram_group_id, chat_id=self.interface.cfg["Telegram"]["main_group_id"],
text=telegram_escape(message), text=escape(message),
parse_mode="HTML", parse_mode="HTML",
disable_webpage_preview=True) disable_webpage_preview=True)
async def _ready_up(self): async def _ready_up(self):
j = await self._get_json() j = await self._get_json()
if j["version"] != "https://jsonfeed.org/version/1": if j["version"] != "https://jsonfeed.org/version/1":
raise ConfigurationError("_url is not a jsonfeed") raise ConfigurationError("url is not a jsonfeed")
videos = j["items"] videos = j["items"]
for video in reversed(videos): for video in reversed(videos):
date_modified = dateparser.parse(video["date_modified"]) date_modified = dateparser.parse(video["date_modified"])
@ -73,7 +67,7 @@ class PeertubeCommand(Command):
await self._send(f"🆕 Nuovo video su RoyalTube!\n" await self._send(f"🆕 Nuovo video su RoyalTube!\n"
f"[b]{video['title']}[/b]\n" f"[b]{video['title']}[/b]\n"
f"{video['url']}") f"{video['url']}")
await asyncio.sleep(self._timeout) await asyncio.sleep(self.interface.cfg["Peertube"]["feed_update_timeout"])
async def run(self, args: CommandArgs, data: CommandData) -> None: async def run(self, args: CommandArgs, data: CommandData) -> None:
if self.interface.name != "telegram": if self.interface.name != "telegram":

View file

@ -0,0 +1,12 @@
# Imports go here!
# Enter the commands of your Pack here!
available_events = [
]
# noinspection PyUnreachableCode
# Don't change this, it should automatically generate __all__
__all__ = [command.__name__ for command in available_events]

View file

@ -1,22 +1,22 @@
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import * from starlette.responses import *
from royalnet.web import * from royalnet.constellation import *
from royalnet.utils import * from royalnet.utils import *
from ..tables import Diario from royalnet.backpack.tables import *
from ..tables import *
class ApiDiarioGetStar(PageStar): class ApiDiarioGetStar(PageStar):
path = "/api/diario/get/{diario_id}" path = "/api/diario/get/{diario_id}"
tables = {Diario}
async def page(self, request: Request) -> JSONResponse: async def page(self, request: Request) -> JSONResponse:
diario_id_str = request.path_params.get("diario_id", "") diario_id_str = request.path_params.get("diario_id", "")
try: try:
diario_id = int(diario_id_str) diario_id = int(diario_id_str)
except (ValueError, TypeError): except (ValueError, TypeError):
return error(400, "Invalid diario_id") return shoot(400, "Invalid diario_id")
async with self.alchemy.session_acm() as session: async with self.alchemy.session_acm() as session:
entry: Diario = await asyncify(session.query(self.alchemy.User).get, diario_id) entry: Diario = await asyncify(session.query(self.alchemy.get(Diario)).get, diario_id)
if entry is None: if entry is None:
return error(404, "No such user") return shoot(404, "No such user")
return JSONResponse(entry.json()) return JSONResponse(entry.json())

View file

@ -1,25 +1,35 @@
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import * from starlette.responses import *
from royalnet.web import * from royalnet.constellation import *
from royalnet.utils import * from royalnet.utils import *
from ..tables import Diario from royalnet.backpack.tables import *
from ..tables import *
class ApiDiarioListStar(PageStar): class ApiDiarioListStar(PageStar):
path = "/api/diario/list" path = "/api/diario/list"
tables = {Diario}
async def page(self, request: Request) -> JSONResponse: async def page(self, request: Request) -> JSONResponse:
page_str = request.query_params.get("page", "0") page_str = request.query_params.get("page", "0")
try: try:
page = int(page_str) page = int(page_str)
except (ValueError, TypeError): except (ValueError, TypeError):
return error(400, "Invalid offset") return shoot(400, "Invalid offset")
async with self.alchemy.session_acm() as session: async with self.alchemy.session_acm() as session:
if page < 0: if page < 0:
page = -page-1 page = -page-1
entries: typing.List[Diario] = await asyncify(session.query(self.alchemy.Diario).order_by(self.alchemy.Diario.diario_id.desc()).limit(500).offset(page * 500).all) entries: typing.List[Diario] = await asyncify(
session.query(self.alchemy.get(Diario))
.order_by(self.alchemy.get(Diario).diario_id.desc()).limit(500)
.offset(page * 500)
.all
)
else: else:
entries: typing.List[Diario] = await asyncify(session.query(self.alchemy.Diario).order_by(self.alchemy.Diario.diario_id).limit(500).offset(page * 500).all) entries: typing.List[Diario] = await asyncify(
session.query(self.alchemy.get(Diario))
.order_by(self.alchemy.get(Diario).diario_id)
.limit(500)
.offset(page * 500)
.all)
response = [entry.json() for entry in entries] response = [entry.json() for entry in entries]
return JSONResponse(response) return JSONResponse(response)

View file

@ -1,22 +1,22 @@
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import * from starlette.responses import *
from royalnet.web import * from royalnet.constellation import *
from royalnet.utils import * from royalnet.utils import *
from royalnet.packs.common.tables import User from royalnet.backpack.tables import *
from ..tables import *
class ApiUserGetStar(PageStar): class ApiUserGetStar(PageStar):
path = "/api/user/get/{uid_str}" path = "/api/user/get/{uid_str}"
tables = {User}
async def page(self, request: Request) -> JSONResponse: async def page(self, request: Request) -> JSONResponse:
uid_str = request.path_params.get("uid_str", "") uid_str = request.path_params.get("uid_str", "")
try: try:
uid = int(uid_str) uid = int(uid_str)
except (ValueError, TypeError): except (ValueError, TypeError):
return error(400, "Invalid uid") return shoot(400, "Invalid uid")
async with self.alchemy.session_acm() as session: async with self.alchemy.session_acm() as session:
user: User = await asyncify(session.query(self.alchemy.User).get, uid) user: User = await asyncify(session.query(self.alchemy.get(User)).get, uid)
if user is None: if user is None:
return error(404, "No such user") return shoot(404, "No such user")
return JSONResponse(user.json()) return JSONResponse(user.json())

View file

@ -1,8 +1,9 @@
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import * from starlette.responses import *
from royalnet.web import * from royalnet.constellation import *
from royalnet.utils import * from royalnet.utils import *
from royalnet.packs.common.tables import User from royalnet.backpack.tables import *
from ..tables import *
class ApiUserListStar(PageStar): class ApiUserListStar(PageStar):
@ -11,5 +12,5 @@ class ApiUserListStar(PageStar):
async def page(self, request: Request) -> JSONResponse: async def page(self, request: Request) -> JSONResponse:
async with self.alchemy.session_acm() as session: async with self.alchemy.session_acm() as session:
users: typing.List[User] = await asyncify(session.query(self.alchemy.User).all) users: typing.List[User] = await asyncify(session.query(self.alchemy.get(User)).all)
return JSONResponse([user.json() for user in users]) return JSONResponse([user.json() for user in users])

View file

@ -1,8 +1,4 @@
# Imports go here! # Imports go here!
from royalnet.packs.common.tables import User
from royalnet.packs.common.tables import Telegram
from royalnet.packs.common.tables import Discord
from .diario import Diario from .diario import Diario
from .aliases import Alias from .aliases import Alias
from .wikipages import WikiPage from .wikipages import WikiPage
@ -16,9 +12,6 @@ from .leagueoflegends import LeagueOfLegends
# Enter the tables of your Pack here! # Enter the tables of your Pack here!
available_tables = [ available_tables = [
User,
Telegram,
Discord,
Diario, Diario,
Alias, Alias,
WikiPage, WikiPage,

View file

@ -83,8 +83,9 @@ class Diario:
f" spoiler={self.spoiler}>" f" spoiler={self.spoiler}>"
def __str__(self): def __str__(self):
text = f"Riga #{self.diario_id}" text = f"Riga #{self.diario_id} (salvata"
text += f" (salvata da {str(self.creator)}" if self.creator is not None:
text += f" da {str(self.creator)}"
text += f" il {self.timestamp.strftime('%Y-%m-%d %H:%M')}):\n" text += f" il {self.timestamp.strftime('%Y-%m-%d %H:%M')}):\n"
if self.media_url is not None: if self.media_url is not None:
text += f"{self.media_url}\n" text += f"{self.media_url}\n"

View file

@ -1,4 +0,0 @@
del /f /q /s dist\*.*
python setup.py sdist bdist_wheel
twine upload dist/*

View file

@ -1,12 +0,0 @@
#!/bin/bash
# Royalnet must be installed with `develop`
VERSION=$(python3.7 -m royalpack.version)
rm -rf dist
python setup.py sdist bdist_wheel
twine upload "dist/royalpack-$VERSION"*
git add *
git commit -m "$VERSION"
git push
hub release create --message "Version $VERSION" --prerelease "$VERSION"