feat(api,userbot,frontend): rename session device from the web ui
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
from userbot.modules.client import PyroClient
|
||||
from userbot.modules.client import DEVICE_MODEL, DEVICE_MODEL_LIMIT, PyroClient
|
||||
|
||||
__all__ = ["PyroClient"]
|
||||
__all__ = ["DEVICE_MODEL", "DEVICE_MODEL_LIMIT", "PyroClient"]
|
||||
|
||||
@@ -6,19 +6,30 @@ if TYPE_CHECKING:
|
||||
from userbot.modules.capture import CaptureContext
|
||||
|
||||
|
||||
DEVICE_MODEL = "Beavergram"
|
||||
DEVICE_MODEL_LIMIT = 32
|
||||
|
||||
|
||||
class PyroClient(Client):
|
||||
def __init__(
|
||||
self, name: str, *, workdir: str = "sessions", load_handlers: bool = True
|
||||
self,
|
||||
name: str,
|
||||
*,
|
||||
workdir: str = "sessions",
|
||||
device_model: str | None = None,
|
||||
load_handlers: bool = True,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
name,
|
||||
workdir=workdir,
|
||||
api_id=2040,
|
||||
api_hash="b18441a1ff607e10a989891a5462e627",
|
||||
device_model="Desktop",
|
||||
device_model=device_model or DEVICE_MODEL,
|
||||
system_version="Windows 11 x64",
|
||||
app_version="6.7.8 x64",
|
||||
app_version="7.0.8 x64",
|
||||
lang_pack="tdesktop",
|
||||
lang_code="en",
|
||||
system_lang_code="en-US",
|
||||
client_platform=enums.ClientPlatform.DESKTOP,
|
||||
)
|
||||
self.capture: CaptureContext | None = None
|
||||
@@ -30,4 +41,4 @@ class PyroClient(Client):
|
||||
self.add_handler(*handler)
|
||||
|
||||
|
||||
__all__ = ["PyroClient"]
|
||||
__all__ = ["DEVICE_MODEL", "DEVICE_MODEL_LIMIT", "PyroClient"]
|
||||
|
||||
@@ -18,6 +18,7 @@ from utils.logging import logger, setup_logging
|
||||
from utils.read.accounts import (
|
||||
ACCOUNTS_CHANGED_CHANNEL,
|
||||
inactive_session_names,
|
||||
session_device_models,
|
||||
sync_account,
|
||||
)
|
||||
from utils.read.watches import WATCHES_CHANGED_CHANNEL
|
||||
@@ -30,6 +31,7 @@ setup_logging()
|
||||
class RunningAccount:
|
||||
client: PyroClient
|
||||
consumer_task: asyncio.Task
|
||||
device_model: str | None
|
||||
|
||||
|
||||
def _sessions_dir() -> Path:
|
||||
@@ -70,14 +72,20 @@ class AccountRegistry:
|
||||
async def sync(self) -> None:
|
||||
async with self._lock:
|
||||
inactive = await inactive_session_names(self._pool)
|
||||
models = await session_device_models(self._pool)
|
||||
present: set[str] = set()
|
||||
for path in sorted(_sessions_dir().glob("*.session")):
|
||||
if path.stem in inactive:
|
||||
await self._log_out(path)
|
||||
continue
|
||||
present.add(path.stem)
|
||||
if path.stem not in self._running:
|
||||
await self._start(path)
|
||||
device_model = models.get(path.stem)
|
||||
running = self._running.get(path.stem)
|
||||
if running is not None and running.device_model != device_model:
|
||||
await self._stop(path.stem)
|
||||
running = None
|
||||
if running is None:
|
||||
await self._start(path, device_model)
|
||||
for session_name in set(self._running) - present:
|
||||
await self._stop(session_name)
|
||||
|
||||
@@ -85,9 +93,11 @@ class AccountRegistry:
|
||||
for session_name in list(self._running):
|
||||
await self._stop(session_name)
|
||||
|
||||
async def _start(self, path: Path) -> None:
|
||||
async def _start(self, path: Path, device_model: str | None) -> None:
|
||||
session_name = path.stem
|
||||
client = PyroClient(session_name, workdir=str(path.parent))
|
||||
client = PyroClient(
|
||||
session_name, workdir=str(path.parent), device_model=device_model
|
||||
)
|
||||
try:
|
||||
await client.start()
|
||||
me = client.me
|
||||
@@ -105,7 +115,7 @@ class AccountRegistry:
|
||||
return
|
||||
consumer = JobConsumer(client, self._pool, account_id)
|
||||
self._running[session_name] = RunningAccount(
|
||||
client, asyncio.create_task(consumer.run())
|
||||
client, asyncio.create_task(consumer.run()), device_model
|
||||
)
|
||||
logger.info(f"[green]Client started:[/] {me.full_name} ({me.id})")
|
||||
await _enqueue_once(self._pool, account_id, "sync_dialogs")
|
||||
|
||||
Reference in New Issue
Block a user