Single part at the root, COMPOSE_FILE in .env

This commit is contained in:
hh committed 2026-09-08 20:38:54 +02:00
1 parent 321e4b6b35
commit aac037676c
86 files changed
+68 -27

No files matched your search

@@ -0,0 +1,3 @@
from .modules.client import PyroClient
__all__ = ["PyroClient"]
@@ -0,0 +1,4 @@
from .runner import main
if __name__ == "__main__":
main()
@@ -0,0 +1,3 @@
from . import echo, private
handlers = echo.handlers + private.handlers
@@ -0,0 +1,12 @@
from pyrogram import filters, types
from userbot import PyroClient
from utils.logging import logger
@PyroClient.on_message(filters.me)
async def echo(_: PyroClient, message: types.Message) -> None:
logger.info(f"[cyan]me:[/] {message.text}")
handlers = echo.handlers
@@ -0,0 +1,3 @@
from . import pm_message
handlers = pm_message.handlers
@@ -0,0 +1,13 @@
from pyrogram import filters, types
from userbot import PyroClient
from utils.logging import logger
@PyroClient.on_message(filters.private & ~filters.me)
async def pm_message(_: PyroClient, message: types.Message) -> None:
sender = message.from_user.id if message.from_user else "unknown"
logger.info(f"[green]pm from {sender}:[/] {message.text}")
handlers = pm_message.handlers
@@ -0,0 +1,27 @@
from pyrogram import Client, enums
class PyroClient(Client):
def __init__(
self, name: str, *, workdir: str = "sessions", load_handlers: bool = True
) -> None:
super().__init__(
name,
workdir=workdir,
api_id=2040,
api_hash="b18441a1ff607e10a989891a5462e627",
device_model="Desktop",
system_version="Windows 11 x64",
app_version="6.2.4 x64",
lang_pack="tdesktop",
client_platform=enums.ClientPlatform.DESKTOP,
)
if load_handlers:
from userbot import handlers # noqa: PLC0415
for handler in handlers.handlers:
self.add_handler(*handler)
__all__ = ["PyroClient"]
@@ -0,0 +1,62 @@
import asyncio
import contextlib
import anyio
import uvloop
{% if use_dishka %}from dependencies.container import container
{% endif %}from userbot.modules.client import PyroClient
{% if database != 'none' %}from utils.db import init_db
{% endif %}from utils.logging import logger, setup_logging
setup_logging()
async def runner() -> None:
{% if database != 'none' %} await init_db()
{% endif %} sessions_dir = anyio.Path("sessions")
await sessions_dir.mkdir(parents=True, exist_ok=True)
started: set[str] = set()
clients: dict[int, PyroClient] = {}
try:
while True:
current = {path.name async for path in sessions_dir.glob("*.session")}
for session_file in current - started:
started.add(session_file)
name = session_file.removesuffix(".session")
try:
client = PyroClient(name)
await client.start()
except Exception as e:
logger.warning(f"[red]Client {name} failed to start: {e}[/]")
continue
me = client.me
logger.info(
f"[green]Client started as[/] "
f"{me.full_name if me else 'unknown'} ({me.id if me else '?'})"
)
if me:
clients[me.id] = client
await asyncio.sleep(10)
finally:
for client in clients.values():
with contextlib.suppress(Exception):
await client.stop()
{% if use_dishka %} await container.close()
{% endif %}
def main() -> None:
uvloop.install()
logger.info("Starting...")
with contextlib.suppress(KeyboardInterrupt):
asyncio.run(runner())
logger.info("[red]Stopped.[/]")