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.
- {ravisremotet-2.2/ravisremotet.egg-info → ravisremotet-2.3}/PKG-INFO +1 -1
- ravisremotet-2.3/moudels/text/caption_manager.py +27 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/text/finaly_text.py +3 -10
- ravisremotet-2.3/moudels/text/text_manager.py +27 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/pyproject.toml +1 -1
- {ravisremotet-2.2 → ravisremotet-2.3/ravisremotet.egg-info}/PKG-INFO +1 -1
- {ravisremotet-2.2 → ravisremotet-2.3}/setup.py +1 -1
- ravisremotet-2.2/moudels/text/caption_manager.py +0 -56
- ravisremotet-2.2/moudels/text/text_manager.py +0 -59
- {ravisremotet-2.2 → ravisremotet-2.3}/LICENSE +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/MANIFEST.in +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/README.md +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/handlers/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/handlers/core_handler.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/account_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/account_viewer.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/cleaner.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/client_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/flood_guard.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/online_client.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/status_report.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/client/test.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/device/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/device/device_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/profile_info.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/profile_media.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/profile_privacy.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/account/profile/username_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/admin/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/admin/admin_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/analytics/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/analytics/analytics_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/batch_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/batch_scheduler.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/message_shift.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/batch/shift_scheduler.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/config.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/getcode_controller.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/help_menu.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/human_behavior.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/menu_state.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/precise_engine.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/response_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/restart_module.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/status_panel.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/core/typing_indicator.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/db/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/db/db_monitor.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/db/sqlite_utils.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/forward_commands.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/forwarder.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/speed_for_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/forward/stop_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/join_controller.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/joiner.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/leave_controller.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/group/lefter.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/actions.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/backup_legacy_inline/button_actions.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/backup_legacy_inline/keyboards.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/callback_router.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/keyboards.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/output_view.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/proxy_message.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/register.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/schema.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/state_catchers.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/menu/state_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/text/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/text/mention_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/__init__.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/block_manager.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/file_sender.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/health.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/moudels/utils/humanize.py +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/SOURCES.txt +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/dependency_links.txt +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/requires.txt +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/ravisremotet.egg-info/top_level.txt +0 -0
- {ravisremotet-2.2 → ravisremotet-2.3}/setup.cfg +0 -0
|
@@ -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
|
-
|
|
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
|
-
# نام تابع برای سازگاری حفظ
|
|
40
|
-
|
|
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)
|
|
@@ -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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|