spluspy 2.2.9__tar.gz → 2.2.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.
- {spluspy-2.2.9/spluspy.egg-info → spluspy-2.2.10}/PKG-INFO +2 -2
- {spluspy-2.2.9 → spluspy-2.2.10}/README.md +1 -1
- {spluspy-2.2.9 → spluspy-2.2.10}/pyproject.toml +1 -1
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/extra.py +145 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/telegrambaseclient.py +12 -438
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/updates.py +43 -155
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/chataction.py +6 -2
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/common.py +42 -1
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/version.py +1 -1
- {spluspy-2.2.9 → spluspy-2.2.10/spluspy.egg-info}/PKG-INFO +2 -2
- {spluspy-2.2.9 → spluspy-2.2.10}/LICENSE +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/setup.cfg +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/_updates/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/_updates/entitycache.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/_updates/messagebox.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/_updates/session.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/admin.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/account.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/auth.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/buttons.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/chats.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/dialogs.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/downloads.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/messageparse.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/messages.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/soroushclient.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/uploads.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/client/users.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/aes.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/aesctr.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/authkey.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/cdndecrypter.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/factorization.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/libssl.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/crypto/rsa.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/custom.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/enums.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/errors/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/errors/common.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/errors/exceptions.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/errors/rpcbaseerrors.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/errors/rpcerrorlist.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/album.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/messagedeleted.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/messageedited.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/messageread.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/newmessage.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/raw.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/events/userupdate.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/extensions/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/extensions/binaryreader.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/extensions/html.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/extensions/markdown.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/extensions/messagepacker.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/filters.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/functions.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/helpers.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/hints.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/authenticator.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/connection.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/http.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/tcpabridged.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/tcpfull.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/tcpintermediate.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/tcpmtproxy.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/tcpobfuscated.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/connection/websocket.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/mtprotoplainsender.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/mtprotosender.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/mtprotostate.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/network/requeststate.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/password.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/requestiter.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/resolvers.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/sessions/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/sessions/abstract.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/sessions/memory.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/sessions/sqlite.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/sessions/string.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/sync.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/alltlobjects.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/core/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/core/gzippacked.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/core/messagecontainer.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/core/rpcresult.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/core/tlmessage.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/adminlogevent.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/button.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/chatgetter.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/conversation.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/dialog.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/draft.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/file.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/forward.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/inputsizedfile.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/message.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/messagebutton.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/participantpermissions.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/qrlogin.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/sendergetter.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/custom/types.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/account.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/auth.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/bots.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/channels.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/chatlists.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/conference.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/contacts.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/folders.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/help.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/langpack.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/messages.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/payments.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/phone.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/photos.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/premium.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/stats.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/stories.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/thirdParty.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/updates.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/upload.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/functions/users.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/patched/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/tlobject.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/__init__.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/account.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/auth.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/bots.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/channels.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/chatlists.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/conference.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/contacts.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/help.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/messages.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/payments.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/phone.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/photos.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/premium.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/stats.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/stickers.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/storage.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/stories.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/thirdParty.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/update.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/updates.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/upload.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/tl/types/users.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy/utils.py +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy.egg-info/SOURCES.txt +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy.egg-info/dependency_links.txt +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy.egg-info/requires.txt +0 -0
- {spluspy-2.2.9 → spluspy-2.2.10}/spluspy.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spluspy
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.10
|
|
4
4
|
Summary: High-performance Python Self-Bot Framework for Soroush Plus
|
|
5
5
|
Author: Ali Mirshekari
|
|
6
6
|
License: MIT
|
|
@@ -26,7 +26,7 @@ Requires-Dist: rsa
|
|
|
26
26
|
Requires-Dist: pyaes
|
|
27
27
|
Dynamic: license-file
|
|
28
28
|
|
|
29
|
-
# SplusPy v2.2.
|
|
29
|
+
# SplusPy v2.2.10
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
**A fast, minimal, and fully-featured self-bot framework**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import typing
|
|
2
3
|
from ..tl import functions, types
|
|
3
4
|
from .. import helpers, utils, hints, errors
|
|
@@ -834,3 +835,147 @@ class ExtraMethods:
|
|
|
834
835
|
return result
|
|
835
836
|
|
|
836
837
|
# endregion
|
|
838
|
+
|
|
839
|
+
# =====================================================================
|
|
840
|
+
# region Bulk Account Maintenance Methods
|
|
841
|
+
# =====================================================================
|
|
842
|
+
|
|
843
|
+
async def get_all_groups(
|
|
844
|
+
self: 'SoroushClient'
|
|
845
|
+
) -> typing.List[dict]:
|
|
846
|
+
"""
|
|
847
|
+
Lists every group/channel the account is a member of.
|
|
848
|
+
|
|
849
|
+
Returns:
|
|
850
|
+
A list of dicts with keys:
|
|
851
|
+
- ``id``: marked chat ID (int)
|
|
852
|
+
- ``title``: display title (str)
|
|
853
|
+
- ``type``: ``'channel'`` or ``'group'``
|
|
854
|
+
- ``username``: public username or None
|
|
855
|
+
"""
|
|
856
|
+
groups = []
|
|
857
|
+
async for dialog in self.iter_dialogs():
|
|
858
|
+
entity = getattr(dialog, 'entity', None)
|
|
859
|
+
if entity is None or isinstance(entity, types.User):
|
|
860
|
+
continue
|
|
861
|
+
if isinstance(entity, types.Channel) and not entity.megagroup:
|
|
862
|
+
kind = 'channel'
|
|
863
|
+
else:
|
|
864
|
+
kind = 'group'
|
|
865
|
+
groups.append({
|
|
866
|
+
'id': dialog.id,
|
|
867
|
+
'title': dialog.name,
|
|
868
|
+
'type': kind,
|
|
869
|
+
'username': getattr(entity, 'username', None),
|
|
870
|
+
})
|
|
871
|
+
return groups
|
|
872
|
+
|
|
873
|
+
async def leave_all(self, delay: float = 0.5) -> dict:
|
|
874
|
+
"""
|
|
875
|
+
Leaves every group/channel; private chats are skipped.
|
|
876
|
+
|
|
877
|
+
Args:
|
|
878
|
+
delay: Pause in seconds between leave requests (flood control).
|
|
879
|
+
|
|
880
|
+
Returns:
|
|
881
|
+
A dict with counts and per-chat details:
|
|
882
|
+
``{'success', 'failed', 'skipped',
|
|
883
|
+
'details': [{'id', 'title', 'status'}]}``
|
|
884
|
+
where status is ``'left'``, ``'failed'`` or ``'skipped'``.
|
|
885
|
+
"""
|
|
886
|
+
success = failed = skipped = 0
|
|
887
|
+
details = []
|
|
888
|
+
async for dialog in self.iter_dialogs():
|
|
889
|
+
entity = getattr(dialog, 'entity', None)
|
|
890
|
+
if entity is None or isinstance(entity, types.User):
|
|
891
|
+
skipped += 1
|
|
892
|
+
details.append({
|
|
893
|
+
'id': dialog.id,
|
|
894
|
+
'title': dialog.name,
|
|
895
|
+
'status': 'skipped'
|
|
896
|
+
})
|
|
897
|
+
continue
|
|
898
|
+
try:
|
|
899
|
+
await self.leave_chat(dialog.input_entity)
|
|
900
|
+
status = 'left'
|
|
901
|
+
success += 1
|
|
902
|
+
except Exception:
|
|
903
|
+
status = 'failed'
|
|
904
|
+
failed += 1
|
|
905
|
+
details.append({
|
|
906
|
+
'id': dialog.id,
|
|
907
|
+
'title': dialog.name,
|
|
908
|
+
'status': status
|
|
909
|
+
})
|
|
910
|
+
await asyncio.sleep(delay)
|
|
911
|
+
return {
|
|
912
|
+
'success': success,
|
|
913
|
+
'failed': failed,
|
|
914
|
+
'skipped': skipped,
|
|
915
|
+
'details': details
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
async def delete_all_private(
|
|
919
|
+
self: 'SoroushClient',
|
|
920
|
+
revoke: bool = True,
|
|
921
|
+
delay: float = 1.0,
|
|
922
|
+
on_progress: typing.Callable[[int, int, str], typing.Any] = None
|
|
923
|
+
) -> dict:
|
|
924
|
+
"""
|
|
925
|
+
Deletes the history of all private chats (optionally revoking them).
|
|
926
|
+
|
|
927
|
+
Args:
|
|
928
|
+
revoke: Also delete the messages for the other side.
|
|
929
|
+
delay: Pause in seconds between requests (flood control).
|
|
930
|
+
on_progress: Optional callback ``(current, total, name)``;
|
|
931
|
+
may be sync or async.
|
|
932
|
+
|
|
933
|
+
Returns:
|
|
934
|
+
A dict with counts and per-chat details:
|
|
935
|
+
``{'success', 'failed', 'skipped',
|
|
936
|
+
'details': [{'id', 'title', 'status'}]}``
|
|
937
|
+
where status is ``'deleted'``, ``'failed'`` or ``'skipped'``.
|
|
938
|
+
"""
|
|
939
|
+
dialogs = []
|
|
940
|
+
async for dialog in self.iter_dialogs():
|
|
941
|
+
if isinstance(getattr(dialog, 'entity', None), types.User):
|
|
942
|
+
if getattr(dialog.entity, 'is_self', False):
|
|
943
|
+
continue
|
|
944
|
+
dialogs.append(dialog)
|
|
945
|
+
|
|
946
|
+
total = len(dialogs)
|
|
947
|
+
success = failed = skipped = 0
|
|
948
|
+
details = []
|
|
949
|
+
|
|
950
|
+
for current, dialog in enumerate(dialogs, start=1):
|
|
951
|
+
title = dialog.name or ''
|
|
952
|
+
try:
|
|
953
|
+
await self(functions.messages.DeleteHistoryRequest(
|
|
954
|
+
peer=dialog.input_entity,
|
|
955
|
+
max_id=0,
|
|
956
|
+
revoke=revoke
|
|
957
|
+
))
|
|
958
|
+
status = 'deleted'
|
|
959
|
+
success += 1
|
|
960
|
+
except Exception:
|
|
961
|
+
status = 'failed'
|
|
962
|
+
failed += 1
|
|
963
|
+
details.append({
|
|
964
|
+
'id': dialog.id,
|
|
965
|
+
'title': title,
|
|
966
|
+
'status': status
|
|
967
|
+
})
|
|
968
|
+
if on_progress:
|
|
969
|
+
result = on_progress(current, total, title)
|
|
970
|
+
if asyncio.iscoroutine(result):
|
|
971
|
+
await result
|
|
972
|
+
await asyncio.sleep(delay)
|
|
973
|
+
|
|
974
|
+
return {
|
|
975
|
+
'success': success,
|
|
976
|
+
'failed': failed,
|
|
977
|
+
'skipped': skipped,
|
|
978
|
+
'details': details
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
# endregion
|