CliRemote 1.7.9__tar.gz → 1.7.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. {cliremote-1.7.9 → cliremote-1.7.10}/CliRemote.egg-info/PKG-INFO +1 -1
  2. {cliremote-1.7.9 → cliremote-1.7.10}/PKG-INFO +1 -1
  3. {cliremote-1.7.9 → cliremote-1.7.10}/pyproject.toml +1 -1
  4. {cliremote-1.7.9 → cliremote-1.7.10}/remote/admin_manager.py +44 -22
  5. {cliremote-1.7.9 → cliremote-1.7.10}/setup.py +1 -1
  6. {cliremote-1.7.9 → cliremote-1.7.10}/CliRemote.egg-info/SOURCES.txt +0 -0
  7. {cliremote-1.7.9 → cliremote-1.7.10}/CliRemote.egg-info/dependency_links.txt +0 -0
  8. {cliremote-1.7.9 → cliremote-1.7.10}/CliRemote.egg-info/requires.txt +0 -0
  9. {cliremote-1.7.9 → cliremote-1.7.10}/CliRemote.egg-info/top_level.txt +0 -0
  10. {cliremote-1.7.9 → cliremote-1.7.10}/LICENSE +0 -0
  11. {cliremote-1.7.9 → cliremote-1.7.10}/MANIFEST.in +0 -0
  12. {cliremote-1.7.9 → cliremote-1.7.10}/README.md +0 -0
  13. {cliremote-1.7.9 → cliremote-1.7.10}/remote/__init__.py +0 -0
  14. {cliremote-1.7.9 → cliremote-1.7.10}/remote/account_manager.py +0 -0
  15. {cliremote-1.7.9 → cliremote-1.7.10}/remote/account_viewer.py +0 -0
  16. {cliremote-1.7.9 → cliremote-1.7.10}/remote/analytics_manager.py +0 -0
  17. {cliremote-1.7.9 → cliremote-1.7.10}/remote/batch_manager.py +0 -0
  18. {cliremote-1.7.9 → cliremote-1.7.10}/remote/block_manager.py +0 -0
  19. {cliremote-1.7.9 → cliremote-1.7.10}/remote/caption_manager.py +0 -0
  20. {cliremote-1.7.9 → cliremote-1.7.10}/remote/cleaner.py +0 -0
  21. {cliremote-1.7.9 → cliremote-1.7.10}/remote/client_manager.py +0 -0
  22. {cliremote-1.7.9 → cliremote-1.7.10}/remote/client_picker.py +0 -0
  23. {cliremote-1.7.9 → cliremote-1.7.10}/remote/config.py +0 -0
  24. {cliremote-1.7.9 → cliremote-1.7.10}/remote/device_manager.py +0 -0
  25. {cliremote-1.7.9 → cliremote-1.7.10}/remote/file_sender.py +0 -0
  26. {cliremote-1.7.9 → cliremote-1.7.10}/remote/getcode_controller.py +0 -0
  27. {cliremote-1.7.9 → cliremote-1.7.10}/remote/health.py +0 -0
  28. {cliremote-1.7.9 → cliremote-1.7.10}/remote/help_menu.py +0 -0
  29. {cliremote-1.7.9 → cliremote-1.7.10}/remote/init.py +0 -0
  30. {cliremote-1.7.9 → cliremote-1.7.10}/remote/join_controller.py +0 -0
  31. {cliremote-1.7.9 → cliremote-1.7.10}/remote/joiner.py +0 -0
  32. {cliremote-1.7.9 → cliremote-1.7.10}/remote/leave_controller.py +0 -0
  33. {cliremote-1.7.9 → cliremote-1.7.10}/remote/lefter.py +0 -0
  34. {cliremote-1.7.9 → cliremote-1.7.10}/remote/mention_manager.py +0 -0
  35. {cliremote-1.7.9 → cliremote-1.7.10}/remote/precise_engine.py +0 -0
  36. {cliremote-1.7.9 → cliremote-1.7.10}/remote/profile_info.py +0 -0
  37. {cliremote-1.7.9 → cliremote-1.7.10}/remote/profile_media.py +0 -0
  38. {cliremote-1.7.9 → cliremote-1.7.10}/remote/profile_privacy.py +0 -0
  39. {cliremote-1.7.9 → cliremote-1.7.10}/remote/spammer.py +0 -0
  40. {cliremote-1.7.9 → cliremote-1.7.10}/remote/speed_manager.py +0 -0
  41. {cliremote-1.7.9 → cliremote-1.7.10}/remote/stop_manager.py +0 -0
  42. {cliremote-1.7.9 → cliremote-1.7.10}/remote/text_manager.py +0 -0
  43. {cliremote-1.7.9 → cliremote-1.7.10}/remote/username_manager.py +0 -0
  44. {cliremote-1.7.9 → cliremote-1.7.10}/remote/utils/__init__.py +0 -0
  45. {cliremote-1.7.9 → cliremote-1.7.10}/remote/utils/sqlite_utils.py +0 -0
  46. {cliremote-1.7.9 → cliremote-1.7.10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: CliRemote
3
- Version: 1.7.9
3
+ Version: 1.7.10
4
4
  Summary: Remote client framework for Telegram automation using Pyrogram
5
5
  Home-page: https://github.com/MohammadAhmadi-R/CliRemote
6
6
  Author: MrAhmadiRad
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: CliRemote
3
- Version: 1.7.9
3
+ Version: 1.7.10
4
4
  Summary: Remote client framework for Telegram automation using Pyrogram
5
5
  Home-page: https://github.com/MohammadAhmadi-R/CliRemote
6
6
  Author: MrAhmadiRad
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "CliRemote"
7
- version = "1.7.9"
7
+ version = "1.7.10"
8
8
  description = "Remote client framework for Telegram automation using Pyrogram"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -1,44 +1,67 @@
1
1
  # remote/admin_manager.py
2
- import json, os, logging
2
+ import json, os, sys, logging
3
+ from pathlib import Path
3
4
  from pyrogram import filters
4
5
  from .config import OWNER_ID
5
6
 
6
7
  logger = logging.getLogger(__name__)
7
8
 
8
- # فایل کنار همین ماژول ذخیره شود، نه نسبت به cwd
9
- BASE_DIR = os.path.dirname(__file__)
10
- ADMINS_FILE = os.path.join(BASE_DIR, "admins.json")
11
-
12
- def load_admins() -> list[int]:
9
+ def _project_root() -> Path:
13
10
  """
14
- بارگذاری لیست ادمین‌ها از فایل + اضافه‌کردن OWNER_ID
11
+ ریشه پروژه = پوشه‌ای که main.py داخلش اجرا شده.
15
12
  """
16
- s = set(OWNER_ID) # همیشه Ownerها باشند
17
13
  try:
18
- if os.path.exists(ADMINS_FILE):
19
- with open(ADMINS_FILE, "r", encoding="utf-8") as f:
14
+ main_file = Path(sys.modules["__main__"].__file__).resolve()
15
+ return main_file.parent
16
+ except Exception:
17
+ # fallback: اگر به هر دلیل __main__.__file__ نبود
18
+ return Path(os.getcwd()).resolve()
19
+
20
+ PROJECT_ROOT = _project_root()
21
+ ADMINS_FILE = PROJECT_ROOT / "admins.json" # ✅ کنار main.py
22
+
23
+ def _load_admins_from_file() -> list[int]:
24
+ try:
25
+ if ADMINS_FILE.exists():
26
+ with ADMINS_FILE.open("r", encoding="utf-8") as f:
20
27
  data = json.load(f)
21
28
  if isinstance(data, list):
29
+ out = []
22
30
  for v in data:
23
31
  try:
24
- s.add(int(v))
32
+ out.append(int(v))
25
33
  except Exception:
26
34
  logger.warning(f"Bad admin id in file: {v!r}")
35
+ return out
27
36
  except Exception as e:
28
- logger.warning(f"Error loading admins: {e}")
29
- return list(s)
37
+ logger.warning(f"Error loading admins from {ADMINS_FILE}: {e}")
38
+ return []
39
+
40
+ # لیست ادمین‌های موثر (فایل + Owner)
41
+ ADMINS: list[int] = []
42
+
43
+ def reload_admins():
44
+ """فایل را می‌خواند و با OWNER_ID ادغام می‌کند؛ نتیجه در ADMINS."""
45
+ file_admins = _load_admins_from_file()
46
+ s = set(file_admins) | set(OWNER_ID)
47
+ global ADMINS
48
+ ADMINS = sorted(s)
49
+ logger.info(f"Loaded admins ({ADMINS_FILE}): {ADMINS}")
30
50
 
31
51
  def save_admins():
32
- """ذخیره‌ی ادمین‌ها در فایل (بدون Ownerها، فقط ADMINS پویا)."""
52
+ """
53
+ ذخیره در فایل کنار main.py.
54
+ فقط ادمین‌های غیر-Owner را داخل فایل نگه می‌داریم (Ownerها از config می‌آیند).
55
+ """
33
56
  try:
34
- with open(ADMINS_FILE, "w", encoding="utf-8") as f:
35
- json.dump(list(ADMINS), f, ensure_ascii=False, indent=2)
57
+ file_list = [x for x in ADMINS if x not in set(OWNER_ID)]
58
+ with ADMINS_FILE.open("w", encoding="utf-8") as f:
59
+ json.dump(file_list, f, ensure_ascii=False, indent=2)
60
+ logger.info(f"Saved admins to {ADMINS_FILE}: {file_list}")
36
61
  except Exception as e:
37
62
  logger.error(f"Error saving admins: {e}")
38
63
 
39
- ADMINS = load_admins()
40
-
41
- # فیلترها (داینامیک: هر بار اجرا، مقدار فعلی لیست‌ها چک می‌شود)
64
+ # فیلترهای دسترسی
42
65
  admin_filter = filters.create(
43
66
  lambda _, __, m: bool(getattr(m, "from_user", None)) and int(m.from_user.id) in ADMINS
44
67
  )
@@ -46,9 +69,7 @@ owner_filter = filters.create(
46
69
  lambda _, __, m: bool(getattr(m, "from_user", None)) and int(m.from_user.id) in OWNER_ID
47
70
  )
48
71
 
49
- # =============================
50
- # فرمان‌های مدیریتی
51
- # =============================
72
+ # ===== فرمان‌ها =====
52
73
  async def add_admin_cmd(message):
53
74
  try:
54
75
  parts = (message.text or "").split()
@@ -61,6 +82,7 @@ async def add_admin_cmd(message):
61
82
  return
62
83
  if uid not in ADMINS:
63
84
  ADMINS.append(uid)
85
+ ADMINS[:] = sorted(set(ADMINS) | set(OWNER_ID))
64
86
  save_admins()
65
87
  await message.reply(f"ادمین جدید اضافه شد: <code>{uid}</code>")
66
88
  logger.info(f"Admin added: {uid}")
@@ -5,7 +5,7 @@ with open("README.md", encoding="utf-8") as f:
5
5
 
6
6
  setup(
7
7
  name="CliRemote",
8
- version="1.7.9",
8
+ version="1.7.10",
9
9
  author="MrAhmadiRad",
10
10
  author_email="mohammadahmadirad69@gmail.com",
11
11
  description="A precise, async-safe, Telegram automation core (Python 3.8+)",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes