ravisremotet 2.2__tar.gz → 2.3__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 (89) hide show
  1. {ravisremotet-2.2/ravisremotet.egg-info → ravisremotet-2.3}/PKG-INFO +1 -1
  2. ravisremotet-2.3/moudels/text/caption_manager.py +27 -0
  3. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/text/finaly_text.py +3 -10
  4. ravisremotet-2.3/moudels/text/text_manager.py +27 -0
  5. {ravisremotet-2.2 → ravisremotet-2.3}/pyproject.toml +1 -1
  6. {ravisremotet-2.2 → ravisremotet-2.3/ravisremotet.egg-info}/PKG-INFO +1 -1
  7. {ravisremotet-2.2 → ravisremotet-2.3}/setup.py +1 -1
  8. ravisremotet-2.2/moudels/text/caption_manager.py +0 -56
  9. ravisremotet-2.2/moudels/text/text_manager.py +0 -59
  10. {ravisremotet-2.2 → ravisremotet-2.3}/LICENSE +0 -0
  11. {ravisremotet-2.2 → ravisremotet-2.3}/MANIFEST.in +0 -0
  12. {ravisremotet-2.2 → ravisremotet-2.3}/README.md +0 -0
  13. {ravisremotet-2.2 → ravisremotet-2.3}/handlers/__init__.py +0 -0
  14. {ravisremotet-2.2 → ravisremotet-2.3}/handlers/core_handler.py +0 -0
  15. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/__init__.py +0 -0
  16. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/__init__.py +0 -0
  17. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/account_manager.py +0 -0
  18. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/account_viewer.py +0 -0
  19. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/cleaner.py +0 -0
  20. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/__init__.py +0 -0
  21. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/client_manager.py +0 -0
  22. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/flood_guard.py +0 -0
  23. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/online_client.py +0 -0
  24. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/status_report.py +0 -0
  25. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/test.py +0 -0
  26. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/device/__init__.py +0 -0
  27. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/device/device_manager.py +0 -0
  28. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/__init__.py +0 -0
  29. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/profile_info.py +0 -0
  30. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/profile_media.py +0 -0
  31. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/profile_privacy.py +0 -0
  32. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/username_manager.py +0 -0
  33. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/admin/__init__.py +0 -0
  34. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/admin/admin_manager.py +0 -0
  35. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/analytics/__init__.py +0 -0
  36. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/analytics/analytics_manager.py +0 -0
  37. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/__init__.py +0 -0
  38. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/batch_manager.py +0 -0
  39. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/batch_scheduler.py +0 -0
  40. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/message_shift.py +0 -0
  41. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/shift_scheduler.py +0 -0
  42. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/__init__.py +0 -0
  43. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/config.py +0 -0
  44. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/getcode_controller.py +0 -0
  45. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/help_menu.py +0 -0
  46. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/human_behavior.py +0 -0
  47. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/menu_state.py +0 -0
  48. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/precise_engine.py +0 -0
  49. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/response_manager.py +0 -0
  50. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/restart_module.py +0 -0
  51. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/status_panel.py +0 -0
  52. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/typing_indicator.py +0 -0
  53. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/db/__init__.py +0 -0
  54. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/db/db_monitor.py +0 -0
  55. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/db/sqlite_utils.py +0 -0
  56. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/__init__.py +0 -0
  57. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/forward_commands.py +0 -0
  58. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/forwarder.py +0 -0
  59. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/speed_for_manager.py +0 -0
  60. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/stop_manager.py +0 -0
  61. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/__init__.py +0 -0
  62. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/join_controller.py +0 -0
  63. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/joiner.py +0 -0
  64. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/leave_controller.py +0 -0
  65. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/lefter.py +0 -0
  66. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/__init__.py +0 -0
  67. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/actions.py +0 -0
  68. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/backup_legacy_inline/button_actions.py +0 -0
  69. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/backup_legacy_inline/keyboards.py +0 -0
  70. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/callback_router.py +0 -0
  71. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/keyboards.py +0 -0
  72. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/output_view.py +0 -0
  73. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/proxy_message.py +0 -0
  74. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/register.py +0 -0
  75. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/schema.py +0 -0
  76. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/state_catchers.py +0 -0
  77. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/state_manager.py +0 -0
  78. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/text/__init__.py +0 -0
  79. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/text/mention_manager.py +0 -0
  80. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/__init__.py +0 -0
  81. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/block_manager.py +0 -0
  82. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/file_sender.py +0 -0
  83. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/health.py +0 -0
  84. {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/humanize.py +0 -0
  85. {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/SOURCES.txt +0 -0
  86. {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/dependency_links.txt +0 -0
  87. {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/requires.txt +0 -0
  88. {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/top_level.txt +0 -0
  89. {ravisremotet-2.2 → ravisremotet-2.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ravisremotet
3
- Version: 2.2
3
+ Version: 2.3
4
4
  Summary: Remote client framework for Telegram automation using Pyrogram
5
5
  Home-page: https://github.com/MohammadAhmadi-R/ravisremote
6
6
  Author: MrAhmadiRad
@@ -0,0 +1,27 @@
1
+ """Legacy command facade for caption management (Spammer removed).
2
+
3
+ The Spammer module no longer exists, so these commands are inert stubs kept only
4
+ so existing imports from the menu keep working.
5
+ """
6
+
7
+ import logging
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+ _REMOVED_MSG = "این قابلیت حذف شده است."
12
+
13
+
14
+ def get_next_caption(_spam_config=None) -> str:
15
+ return ""
16
+
17
+
18
+ async def show_caption_cmd(message, _spam_config=None):
19
+ await message.reply(_REMOVED_MSG)
20
+
21
+
22
+ async def add_caption_cmd(message, _spam_config=None):
23
+ await message.reply(_REMOVED_MSG)
24
+
25
+
26
+ async def clear_caption_cmd(message, _spam_config=None):
27
+ await message.reply(_REMOVED_MSG)
@@ -7,7 +7,6 @@
7
7
  import html
8
8
  import re
9
9
  from typing import Dict, List, Optional, Tuple, Union
10
- from ..spammer import spam_text, spam_caption
11
10
  from ..core.config import spam_config
12
11
  from .mention_manager import make_mention_html # سازنده‌ی <a href="tg://user?id=...">label</a>
13
12
 
@@ -26,20 +25,14 @@ def get_random_text() -> str:
26
25
  متن بعدی اسپمر را مستقیماً از data/spam/texts.json می‌گیرد.
27
26
  اگر لیست خالی باشد، رشته خالی برمی‌گرداند تا موتور چیزی ارسال نکند.
28
27
  """
29
- try:
30
- txt = spam_text.next_text()
31
- return str(txt) if txt is not None else ""
32
- except Exception:
33
- return ""
28
+ return ""
34
29
 
35
30
  # =========================
36
31
  # کپشن اسپمر از فایل مستقل data/spam/captions.json (وقتی base=Message نیست)
37
32
  # =========================
38
33
  def _next_spam_caption() -> str:
39
- # نام تابع برای سازگاری حفظ شده، اما منبع دیگر config نیست.
40
- # کپشن اسپمر مستقیماً از data/spam/captions.json خوانده می‌شود.
41
- value = spam_caption.next_caption()
42
- return str(value) if value is not None else ""
34
+ # اسپمر حذف شده؛ نام تابع برای سازگاری حفظ شده است.
35
+ return ""
43
36
 
44
37
 
45
38
  # =========================
@@ -0,0 +1,27 @@
1
+ """Legacy command facade for text management (Spammer removed).
2
+
3
+ The Spammer module no longer exists, so these commands are inert stubs kept only
4
+ so existing imports from the menu keep working.
5
+ """
6
+
7
+ import logging
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+ _REMOVED_MSG = "این قابلیت حذف شده است."
12
+
13
+
14
+ def get_spam_texts():
15
+ raise LookupError("No text is configured")
16
+
17
+
18
+ async def save_text_cmd(message):
19
+ await message.reply(_REMOVED_MSG)
20
+
21
+
22
+ async def clear_texts_cmd(message):
23
+ await message.reply(_REMOVED_MSG)
24
+
25
+
26
+ async def show_texts_cmd(message):
27
+ await message.reply(_REMOVED_MSG)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ravisremotet"
7
- version = "2.2"
7
+ version = "2.3"
8
8
  description = "Remote client framework for Telegram automation using Pyrogram"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ravisremotet
3
- Version: 2.2
3
+ Version: 2.3
4
4
  Summary: Remote client framework for Telegram automation using Pyrogram
5
5
  Home-page: https://github.com/MohammadAhmadi-R/ravisremote
6
6
  Author: MrAhmadiRad
@@ -5,7 +5,7 @@ with open("README.md", encoding="utf-8") as f:
5
5
 
6
6
  setup(
7
7
  name="ravisremotet",
8
- version="2.2",
8
+ version="2.3",
9
9
  author="MrAhmadiRad",
10
10
  author_email="mohammadahmadirad69@gmail.com",
11
11
  description="A precise, async-safe, Telegram automation core (Python 3.8+)",
@@ -1,56 +0,0 @@
1
- """Legacy command facade for Spammer caption management.
2
-
3
- The source of truth is no longer core.config. All spam captions live in:
4
- CliRemoteertest/data/spam/captions.json
5
-
6
- There is no maximum caption count at the storage layer.
7
- """
8
-
9
- import logging
10
- from ..spammer import spam_caption
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
-
15
- def get_next_caption(_spam_config=None) -> str:
16
- value = spam_caption.next_caption()
17
- return str(value) if value is not None else ""
18
-
19
-
20
- def _command_payload(raw_text: str) -> str:
21
- text = raw_text or ""
22
- _command, separator, payload = text.partition(" ")
23
- return payload if separator else ""
24
-
25
-
26
- async def show_caption_cmd(message, _spam_config=None):
27
- try:
28
- captions = spam_caption.all()
29
- if not captions:
30
- await message.reply("فهرست کپشن‌ها خالی است.")
31
- return
32
- await message.reply(f"تعداد کپشن‌ها: {len(captions)}")
33
- for index, caption in enumerate(captions, 1):
34
- await message.reply(f"کپشن {index}\n\n{caption}")
35
- except Exception as e:
36
- await message.reply(f"خطا در نمایش کپشن: {e}")
37
-
38
-
39
- async def add_caption_cmd(message, _spam_config=None):
40
- try:
41
- caption = _command_payload(message.text)
42
- if not caption.strip():
43
- await message.reply("کپشن را وارد کن.")
44
- return
45
- spam_caption.add(caption)
46
- await message.reply(f"کپشن ذخیره شد؛ تعداد کل: {len(spam_caption.all())}.")
47
- except Exception as e:
48
- await message.reply(f"خطا در اضافه کردن کپشن: {e}")
49
-
50
-
51
- async def clear_caption_cmd(message, _spam_config=None):
52
- try:
53
- spam_caption.clear()
54
- await message.reply("همه کپشن‌ها پاک شدند.")
55
- except Exception as e:
56
- await message.reply(f"خطا در حذف کپشن: {e}")
@@ -1,59 +0,0 @@
1
- """Legacy command facade for Spammer text management.
2
-
3
- The source of truth is no longer core.config. All spam texts live in:
4
- CliRemoteertest/data/spam/texts.json
5
-
6
- Menu code uses moudels.spammer.spam_text directly; these functions remain so old
7
- text commands/imports keep working against the same persistent data.
8
- """
9
-
10
- import logging
11
- from ..spammer import spam_text
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- def get_spam_texts():
17
- value = spam_text.next_text()
18
- if value is None:
19
- raise LookupError("No spam text is configured")
20
- return str(value)
21
-
22
-
23
- def _command_payload(raw_text: str) -> str:
24
- text = raw_text or ""
25
- _command, separator, payload = text.partition(" ")
26
- return payload if separator else ""
27
-
28
-
29
- async def save_text_cmd(message):
30
- try:
31
- content = _command_payload(message.text)
32
- if not content.strip():
33
- await message.reply("لطفا متن را وارد کنید")
34
- return
35
- spam_text.add(content)
36
- await message.reply("**سیو شد**")
37
- except Exception as e:
38
- await message.reply(f"خطا در ذخیره متن: {e}")
39
-
40
-
41
- async def clear_texts_cmd(message):
42
- try:
43
- spam_text.clear()
44
- await message.reply("**لیست تکست‌ها پاکسازی شد!**")
45
- except Exception as e:
46
- await message.reply(f"خطا در پاکسازی متن‌ها: {e}")
47
-
48
-
49
- async def show_texts_cmd(message):
50
- try:
51
- texts = spam_text.all()
52
- if not texts:
53
- await message.reply("فهرست متن‌ها خالی است.")
54
- return
55
- await message.reply(f"تعداد متن‌ها: {len(texts)}")
56
- for index, text in enumerate(texts, 1):
57
- await message.reply(f"متن {index}\n\n{text}")
58
- except Exception as e:
59
- await message.reply(f"خطا در مشاهده متن: {e}")
File without changes
File without changes
File without changes
File without changes