diff --git a/hikka/main.py b/hikka/main.py index 64e5601..36343ac 100755 --- a/hikka/main.py +++ b/hikka/main.py @@ -435,6 +435,7 @@ class Hikka: connection=self.conn, proxy=self.proxy, connection_retries=None, + device_model="Hikka", ) client.start(phone=raise_auth if self.web else lambda: input("Phone: ")) diff --git a/hikka/modules/hikka_dl.py b/hikka/modules/hikka_dl.py new file mode 100644 index 0000000..5f6fbe3 --- /dev/null +++ b/hikka/modules/hikka_dl.py @@ -0,0 +1,97 @@ +# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ ▄▀█ ▀█▀ ▄▀█ █▀▄▀█ ▄▀█ +# █▀█ █ █ █ █▀█ █▀▄ █ ▄ █▀█ █ █▀█ █ ▀ █ █▀█ +# +# © Copyright 2022 +# +# https://t.me/hikariatama +# +# 🔒 Licensed under the GNU GPLv3 +# 🌐 https://www.gnu.org/licenses/agpl-3.0.html + +# scope: inline +# scope: hikka_only +# meta developer: @hikariatama + +from .. import loader +import websockets +import logging +import asyncio +from .._types import LoadError +import json +import re + +logger = logging.getLogger(__name__) + + +@loader.tds +class HikkaDLMod(loader.Module): + """Downloads stuff""" + + strings = {"name": "HikkaDL"} + + async def _wss(self) -> None: + async with websockets.connect("wss://hikka.hikariatama.ru/ws") as wss: + await wss.send(self.get("token")) + + while True: + ans = json.loads(await wss.recv()) + logger.debug(ans) + if ans["event"] == "dlmod": + try: + msg = ( + await self._client.get_messages( + ans["channel"], + ids=[ans["message_id"]], + ) + )[0] + except Exception: + await wss.send("msg_404") + continue + + try: + link = re.search( + r".dlmod (https?://.*?\.py)", + msg.raw_text, + ).group(1) + except Exception: + await wss.send("link_404") + continue + + m = await self._client.send_message("me", f".dlmod {link}") + await self.allmodules.commands["dlmod"](m) + await wss.send( + (await self._client.get_messages(m.peer_id, ids=[m.id]))[ + 0 + ].raw_text.splitlines()[0] + ) + await m.delete() + + async def _connect(self) -> None: + while True: + try: + await self._wss() + except Exception: + logger.debug("Socket disconnected, retry in 10 sec") + + await asyncio.sleep(10) + + async def client_ready(self, client, db) -> None: + self._db = db + self._client = client + self._bot = "@hikka_userbot" + + if not self.get("token"): + async with client.conversation(self._bot) as conv: + m = await conv.send_message("/token") + r = await conv.get_response() + token = r.raw_text + await m.delete() + await r.delete() + if not token.startswith("kirito_") and not token.startswith("asuna_"): + raise LoadError("Can't get token") + self.set("token", token) + + self._task = asyncio.ensure_future(self._connect()) + + async def on_unload(self) -> None: + self._task.cancel() diff --git a/hikka/version.py b/hikka/version.py index 6bfdaa2..bc4a363 100644 --- a/hikka/version.py +++ b/hikka/version.py @@ -1 +1 @@ -__version__ = (1, 0, 21) +__version__ = (1, 0, 22)