telegram: v2.2024.25
This commit is contained in:
parent
387d2a222a
commit
93e868845a
5
src/spow-telegram-bridge/README.md
Normal file
5
src/spow-telegram-bridge/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# surplus on wheels: Telegram Bridge
|
||||||
|
|
||||||
|
see <https://surplus.joshwel.co/onwheels/telegram-bridge>
|
||||||
|
or [/docs/onwheels/telegram-bridge.md](../../docs/onwheels/telegram-bridge.md)
|
||||||
|
for more information and documentation
|
|
@ -31,15 +31,13 @@ For more information, please refer to <http://unlicense.org/>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
from datetime import datetime
|
from os import environ
|
||||||
from os import environ, chdir
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from sys import argv, stderr, stdin
|
from sys import argv, stderr, stdin
|
||||||
from traceback import print_tb
|
from traceback import print_tb
|
||||||
from typing import Generic, NamedTuple, TypeVar
|
from typing import Final
|
||||||
|
|
||||||
from telethon import TelegramClient # type: ignore
|
from telethon import TelegramClient # type: ignore
|
||||||
from telethon.tl import functions # type: ignore
|
|
||||||
|
|
||||||
# exit codes:
|
# exit codes:
|
||||||
# 1 - bad command usage or missing env vars
|
# 1 - bad command usage or missing env vars
|
||||||
|
@ -54,22 +52,23 @@ from telethon.tl import functions # type: ignore
|
||||||
# send ~/.cache/s+ow/message
|
# send ~/.cache/s+ow/message
|
||||||
|
|
||||||
|
|
||||||
|
SESSION_NAME: Final[str] = "spowtg"
|
||||||
|
|
||||||
dir_data: Path = Path.home().joinpath(".local/share/s+ow-telegram-bridge")
|
dir_data: Path = Path.home().joinpath(".local/share/s+ow-telegram-bridge")
|
||||||
dir_data.mkdir(parents=True, exist_ok=True)
|
dir_data.mkdir(parents=True, exist_ok=True)
|
||||||
chdir(dir_data)
|
|
||||||
dir_cache: Path = Path.home().joinpath(".cache/s+ow-telegram-bridge")
|
dir_cache: Path = Path.home().joinpath(".cache/s+ow-telegram-bridge")
|
||||||
dir_cache.mkdir(parents=True, exist_ok=True)
|
dir_cache.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
api_id: str | None = environ.get("SPOW_TELEGRAM_API_ID", None)
|
||||||
session = "s+ow-telegram-bridge"
|
api_hash: str | None = environ.get("SPOW_TELEGRAM_API_HASH", None)
|
||||||
api_id = environ.get("SPOW_TELEGRAM_API_ID", None)
|
message_file: Path = Path.home().joinpath(".cache/s+ow/message")
|
||||||
api_hash = environ.get("SPOW_TELEGRAM_API_HASH", None)
|
session_file: Path = dir_data.joinpath(f"{SESSION_NAME}.session")
|
||||||
message = Path.home().joinpath(".cache/s+ow/message")
|
|
||||||
|
|
||||||
|
|
||||||
def handle_error(
|
def handle_error(
|
||||||
exc: Exception | None = None,
|
exc: Exception | None = None,
|
||||||
message: str = "error",
|
err_message: str = "error",
|
||||||
recoverable: bool = False,
|
recoverable: bool = False,
|
||||||
exit_code: int = -1,
|
exit_code: int = -1,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -80,11 +79,11 @@ def handle_error(
|
||||||
print_tb(exc.__traceback__, file=stderr)
|
print_tb(exc.__traceback__, file=stderr)
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"s+ow-telegram-bridge: {message}{exc_details}",
|
f"s+ow-telegram-bridge: {err_message}{exc_details}",
|
||||||
file=stderr,
|
file=stderr,
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception as exc:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if not recoverable:
|
if not recoverable:
|
||||||
|
@ -100,13 +99,8 @@ def validate_vars() -> None:
|
||||||
print("s+ow-telegram-bridge: error: SPOW_TELEGRAM_API_HASH not set", file=stderr)
|
print("s+ow-telegram-bridge: error: SPOW_TELEGRAM_API_HASH not set", file=stderr)
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if not (message.exists() and message.is_file()):
|
|
||||||
print("s+ow-telegram-bridge: error: ~/.cache/s+ow/message not found", file=stderr)
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
async def run() -> None:
|
async def run() -> None:
|
||||||
validate_vars()
|
|
||||||
silent: bool = "--silent" in argv
|
silent: bool = "--silent" in argv
|
||||||
delete_last: bool = "--delete-last" in argv
|
delete_last: bool = "--delete-last" in argv
|
||||||
|
|
||||||
|
@ -117,9 +111,22 @@ async def run() -> None:
|
||||||
print("s+ow-telegram-bridge: info: --delete-last passed", file=stderr)
|
print("s+ow-telegram-bridge: info: --delete-last passed", file=stderr)
|
||||||
|
|
||||||
targets: list[int] = []
|
targets: list[int] = []
|
||||||
|
|
||||||
|
# "spec" point 2:
|
||||||
|
# reads in SPOW_TARGETS given by surplus to the bridge using stdin
|
||||||
|
# "spec" point 2(a):
|
||||||
|
# bridges do not need to account for the possibility of multiple lines sent to stdin
|
||||||
|
# this bridge doesn't do this because it's simpler to iterate through stdin with a 'for'
|
||||||
|
# loop in python
|
||||||
for line in stdin:
|
for line in stdin:
|
||||||
for _target in line.split(","):
|
for _target in line.split(","):
|
||||||
if (_target := _target.strip()).startswith("tg:"):
|
# "spec" point 2(b):
|
||||||
|
# bridges should account for the possibility of comma and space delimited targets
|
||||||
|
_target = _target.strip()
|
||||||
|
|
||||||
|
# "spec" point 2(c):
|
||||||
|
# bridges should recognise a platform based on a prefix
|
||||||
|
if _target.startswith("tg:"):
|
||||||
_target = _target[3:]
|
_target = _target[3:]
|
||||||
if not (
|
if not (
|
||||||
_target.isnumeric()
|
_target.isnumeric()
|
||||||
|
@ -133,19 +140,26 @@ async def run() -> None:
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
handle_error(
|
handle_error(
|
||||||
exc=exc,
|
exc=exc,
|
||||||
message=f"error: could not cast '{_target}' as int",
|
err_message=f"error: could not cast '{_target}' as int",
|
||||||
recoverable=True,
|
recoverable=True,
|
||||||
exit_code=2,
|
exit_code=2,
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
async with TelegramClient(session, api_id, api_hash) as client:
|
# "spec" point 3:
|
||||||
|
# reads SPOW_MESSAGE (~/.cache/spow/message) for the message content
|
||||||
|
if not (message_file.exists() and message_file.is_file()):
|
||||||
|
print("s+ow-telegram-bridge: error: ~/.cache/s+ow/message not found", file=stderr)
|
||||||
|
exit(1)
|
||||||
|
message = message_file.read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
async with TelegramClient(session_file, api_id, api_hash) as client:
|
||||||
for target in targets:
|
for target in targets:
|
||||||
try:
|
try:
|
||||||
if delete_last is False:
|
if delete_last is False:
|
||||||
await client.send_message(
|
await client.send_message(
|
||||||
int(target),
|
int(target),
|
||||||
message.read_text(encoding="utf-8"),
|
message,
|
||||||
silent=silent,
|
silent=silent,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -163,7 +177,7 @@ async def run() -> None:
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
handle_error(
|
handle_error(
|
||||||
exc=exc,
|
exc=exc,
|
||||||
message=f"error: could not delete old message",
|
err_message="error: could not delete old message",
|
||||||
recoverable=True,
|
recoverable=True,
|
||||||
exit_code=3,
|
exit_code=3,
|
||||||
)
|
)
|
||||||
|
@ -172,7 +186,7 @@ async def run() -> None:
|
||||||
# send new message
|
# send new message
|
||||||
target_sent_message = await client.send_message(
|
target_sent_message = await client.send_message(
|
||||||
target,
|
target,
|
||||||
message.read_text(),
|
message,
|
||||||
silent=silent,
|
silent=silent,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -182,7 +196,7 @@ async def run() -> None:
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
handle_error(
|
handle_error(
|
||||||
exc=exc,
|
exc=exc,
|
||||||
message=f"error: could not send message",
|
err_message="error: could not send message",
|
||||||
recoverable=True,
|
recoverable=True,
|
||||||
exit_code=3,
|
exit_code=3,
|
||||||
)
|
)
|
||||||
|
@ -193,15 +207,21 @@ async def run() -> None:
|
||||||
|
|
||||||
|
|
||||||
def login() -> None:
|
def login() -> None:
|
||||||
validate_vars()
|
with TelegramClient(session_file, api_id, api_hash) as client:
|
||||||
with TelegramClient(session, api_id, api_hash) as client:
|
|
||||||
client.start()
|
client.start()
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
def logout() -> None:
|
||||||
|
if session_file.exists():
|
||||||
|
session_file.unlink()
|
||||||
|
print("s+ow-telegram-bridge: logged out successfully", file=stderr)
|
||||||
|
else:
|
||||||
|
print("s+ow-telegram-bridge: already logged out", file=stderr)
|
||||||
|
|
||||||
|
|
||||||
def list_chats() -> None:
|
def list_chats() -> None:
|
||||||
validate_vars()
|
with TelegramClient(session_file, api_id, api_hash) as client:
|
||||||
with TelegramClient(session, api_id, api_hash) as client:
|
|
||||||
for dialog in client.iter_dialogs():
|
for dialog in client.iter_dialogs():
|
||||||
print(dialog.id, "\t", dialog.name)
|
print(dialog.id, "\t", dialog.name)
|
||||||
exit()
|
exit()
|
||||||
|
@ -213,9 +233,14 @@ def entry() -> None:
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if "login" in argv:
|
if "login" in argv:
|
||||||
|
validate_vars()
|
||||||
login()
|
login()
|
||||||
|
|
||||||
|
elif "logout" in argv:
|
||||||
|
logout()
|
||||||
|
|
||||||
elif "list" in argv:
|
elif "list" in argv:
|
||||||
|
validate_vars()
|
||||||
list_chats()
|
list_chats()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
5
src/spow-telegram-bridge/install.sh
Normal file
5
src/spow-telegram-bridge/install.sh
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# surplus on wheels: Telegram Bridge: installation and updater script
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo TODO
|
228
src/spow-telegram-bridge/poetry.lock
generated
228
src/spow-telegram-bridge/poetry.lock
generated
|
@ -1,179 +1,4 @@
|
||||||
# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
|
# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "black"
|
|
||||||
version = "23.10.1"
|
|
||||||
description = "The uncompromising code formatter."
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.8"
|
|
||||||
files = [
|
|
||||||
{file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"},
|
|
||||||
{file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"},
|
|
||||||
{file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"},
|
|
||||||
{file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"},
|
|
||||||
{file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"},
|
|
||||||
{file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"},
|
|
||||||
{file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"},
|
|
||||||
{file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"},
|
|
||||||
{file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"},
|
|
||||||
{file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"},
|
|
||||||
{file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"},
|
|
||||||
{file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"},
|
|
||||||
{file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"},
|
|
||||||
{file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"},
|
|
||||||
{file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"},
|
|
||||||
{file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"},
|
|
||||||
{file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"},
|
|
||||||
{file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
click = ">=8.0.0"
|
|
||||||
mypy-extensions = ">=0.4.3"
|
|
||||||
packaging = ">=22.0"
|
|
||||||
pathspec = ">=0.9.0"
|
|
||||||
platformdirs = ">=2"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
colorama = ["colorama (>=0.4.3)"]
|
|
||||||
d = ["aiohttp (>=3.7.4)"]
|
|
||||||
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
|
|
||||||
uvloop = ["uvloop (>=0.15.2)"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "click"
|
|
||||||
version = "8.1.7"
|
|
||||||
description = "Composable command line interface toolkit"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.7"
|
|
||||||
files = [
|
|
||||||
{file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
|
|
||||||
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "colorama"
|
|
||||||
version = "0.4.6"
|
|
||||||
description = "Cross-platform colored terminal text."
|
|
||||||
optional = false
|
|
||||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
|
||||||
files = [
|
|
||||||
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
|
||||||
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "isort"
|
|
||||||
version = "5.12.0"
|
|
||||||
description = "A Python utility / library to sort Python imports."
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.8.0"
|
|
||||||
files = [
|
|
||||||
{file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"},
|
|
||||||
{file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
colors = ["colorama (>=0.4.3)"]
|
|
||||||
pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"]
|
|
||||||
plugins = ["setuptools"]
|
|
||||||
requirements-deprecated-finder = ["pip-api", "pipreqs"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "mypy"
|
|
||||||
version = "1.6.1"
|
|
||||||
description = "Optional static typing for Python"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.8"
|
|
||||||
files = [
|
|
||||||
{file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"},
|
|
||||||
{file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"},
|
|
||||||
{file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"},
|
|
||||||
{file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"},
|
|
||||||
{file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"},
|
|
||||||
{file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"},
|
|
||||||
{file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"},
|
|
||||||
{file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"},
|
|
||||||
{file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"},
|
|
||||||
{file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"},
|
|
||||||
{file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"},
|
|
||||||
{file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"},
|
|
||||||
{file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"},
|
|
||||||
{file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"},
|
|
||||||
{file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"},
|
|
||||||
{file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"},
|
|
||||||
{file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"},
|
|
||||||
{file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"},
|
|
||||||
{file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"},
|
|
||||||
{file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"},
|
|
||||||
{file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"},
|
|
||||||
{file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"},
|
|
||||||
{file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"},
|
|
||||||
{file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"},
|
|
||||||
{file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"},
|
|
||||||
{file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"},
|
|
||||||
{file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
mypy-extensions = ">=1.0.0"
|
|
||||||
typing-extensions = ">=4.1.0"
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
dmypy = ["psutil (>=4.0)"]
|
|
||||||
install-types = ["pip"]
|
|
||||||
reports = ["lxml"]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "mypy-extensions"
|
|
||||||
version = "1.0.0"
|
|
||||||
description = "Type system extensions for programs checked with the mypy type checker."
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.5"
|
|
||||||
files = [
|
|
||||||
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
|
|
||||||
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "packaging"
|
|
||||||
version = "23.2"
|
|
||||||
description = "Core utilities for Python packages"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.7"
|
|
||||||
files = [
|
|
||||||
{file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
|
|
||||||
{file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pathspec"
|
|
||||||
version = "0.11.2"
|
|
||||||
description = "Utility library for gitignore style pattern matching of file paths."
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.7"
|
|
||||||
files = [
|
|
||||||
{file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
|
|
||||||
{file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "platformdirs"
|
|
||||||
version = "3.11.0"
|
|
||||||
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.7"
|
|
||||||
files = [
|
|
||||||
{file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"},
|
|
||||||
{file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[package.extras]
|
|
||||||
docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
|
|
||||||
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyaes"
|
name = "pyaes"
|
||||||
|
@ -187,13 +12,13 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyasn1"
|
name = "pyasn1"
|
||||||
version = "0.5.0"
|
version = "0.6.0"
|
||||||
description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
|
description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"},
|
{file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"},
|
||||||
{file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"},
|
{file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -210,14 +35,40 @@ files = [
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
pyasn1 = ">=0.1.3"
|
pyasn1 = ">=0.1.3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ruff"
|
||||||
|
version = "0.4.9"
|
||||||
|
description = "An extremely fast Python linter and code formatter, written in Rust."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "ruff-0.4.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b262ed08d036ebe162123170b35703aaf9daffecb698cd367a8d585157732991"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:98ec2775fd2d856dc405635e5ee4ff177920f2141b8e2d9eb5bd6efd50e80317"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4555056049d46d8a381f746680db1c46e67ac3b00d714606304077682832998e"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e91175fbe48f8a2174c9aad70438fe9cb0a5732c4159b2a10a3565fea2d94cde"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e8e7b95673f22e0efd3571fb5b0cf71a5eaaa3cc8a776584f3b2cc878e46bff"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2d45ddc6d82e1190ea737341326ecbc9a61447ba331b0a8962869fcada758505"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78de3fdb95c4af084087628132336772b1c5044f6e710739d440fc0bccf4d321"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06b60f91bfa5514bb689b500a25ba48e897d18fea14dce14b48a0c40d1635893"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88bffe9c6a454bf8529f9ab9091c99490578a593cc9f9822b7fc065ee0712a06"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:673bddb893f21ab47a8334c8e0ea7fd6598ecc8e698da75bcd12a7b9d0a3206e"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8c1aff58c31948cc66d0b22951aa19edb5af0a3af40c936340cd32a8b1ab7438"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:784d3ec9bd6493c3b720a0b76f741e6c2d7d44f6b2be87f5eef1ae8cc1d54c84"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:732dd550bfa5d85af8c3c6cbc47ba5b67c6aed8a89e2f011b908fc88f87649db"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-win32.whl", hash = "sha256:8064590fd1a50dcf4909c268b0e7c2498253273309ad3d97e4a752bb9df4f521"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-win_amd64.whl", hash = "sha256:e0a22c4157e53d006530c902107c7f550b9233e9706313ab57b892d7197d8e52"},
|
||||||
|
{file = "ruff-0.4.9-py3-none-win_arm64.whl", hash = "sha256:5d5460f789ccf4efd43f265a58538a2c24dbce15dbf560676e430375f20a8198"},
|
||||||
|
{file = "ruff-0.4.9.tar.gz", hash = "sha256:f1cb0828ac9533ba0135d148d214e284711ede33640465e706772645483427e3"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "telethon"
|
name = "telethon"
|
||||||
version = "1.32.0"
|
version = "1.36.0"
|
||||||
description = "Full-featured Telegram client library for Python 3"
|
description = "Full-featured Telegram client library for Python 3"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
{file = "Telethon-1.32.0.tar.gz", hash = "sha256:a7efe0da9002e545236d636833e29e1be460e268d20ca49d03f8b9e8c9dab82a"},
|
{file = "Telethon-1.36.0.tar.gz", hash = "sha256:11db5c7ed7e37f1272d443fb7eea0f1db580d56c6949165233946fb323aaf3a7"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -227,18 +78,7 @@ rsa = "*"
|
||||||
[package.extras]
|
[package.extras]
|
||||||
cryptg = ["cryptg"]
|
cryptg = ["cryptg"]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "typing-extensions"
|
|
||||||
version = "4.8.0"
|
|
||||||
description = "Backported and Experimental Type Hints for Python 3.8+"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.8"
|
|
||||||
files = [
|
|
||||||
{file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"},
|
|
||||||
{file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"},
|
|
||||||
]
|
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.11"
|
python-versions = "^3.11"
|
||||||
content-hash = "be959138054d5d36d8a880f957864c6968bee660b7e8d376f1694b96274295ec"
|
content-hash = "b300d23402569a7e4067f7c91d4acc056df807452226d75137b556abec7def1b"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "spow-telegram-bridge"
|
name = "spow-telegram-bridge"
|
||||||
version = "0.1.0"
|
version = "2.2024.25"
|
||||||
description = "add-on bridge for surplus on wheels (s+ow) to telegram"
|
description = "add-on bridge for surplus on wheels (s+ow) to telegram"
|
||||||
authors = ["Mark Joshwel <mark@joshwel.co>"]
|
authors = ["Mark Joshwel <mark@joshwel.co>"]
|
||||||
license = "Unlicense"
|
license = "Unlicense"
|
||||||
|
@ -11,22 +11,26 @@ packages = [
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.11"
|
python = "^3.11"
|
||||||
Telethon = "^1.32.0"
|
Telethon = "^1.36.0"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
|
||||||
black = "^23.10.1"
|
|
||||||
mypy = "^1.6.1"
|
|
||||||
isort = "^5.12.0"
|
|
||||||
|
|
||||||
[tool.poetry.scripts]
|
[tool.poetry.scripts]
|
||||||
spow-telegram-bridge = 'bridge:entry'
|
spow-telegram-bridge = 'bridge:entry'
|
||||||
"s+ow-telegram-bridge" = 'bridge:entry'
|
"s+ow-telegram-bridge" = 'bridge:entry'
|
||||||
|
|
||||||
|
[tool.poetry.group.dev.dependencies]
|
||||||
|
# https://github.com/nix-community/poetry2nix/blob/master/docs/edgecases.md#errors-that-are-related-to-rust-and-cargo
|
||||||
|
# if bumping this, also update the flake.nix file
|
||||||
|
ruff = "0.4.9"
|
||||||
|
|
||||||
|
[tool.ruff]
|
||||||
|
line-length = 100
|
||||||
|
target-version = "py311"
|
||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
line-length = 90
|
line-length = 100
|
||||||
|
|
||||||
[tool.isort]
|
[tool.isort]
|
||||||
line_length = 90
|
line_length = 100
|
||||||
profile = "black"
|
profile = "black"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
|
|
Loading…
Reference in a new issue