-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathno_ttl.py
147 lines (117 loc) · 4.98 KB
/
no_ttl.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
__version__ = (0, 0, 2)
# ▄▀█ █▄ █ █▀█ █▄ █ █▀█ ▀▀█ █▀█ █ █ █▀
# █▀█ █ ▀█ █▄█ █ ▀█ ▀▀█ █ ▀▀█ ▀▀█ ▄█
#
# © Copyright 2025
#
# developed by @anon97945
#
# https://t.me/apodiktum_modules
# https://github.com/anon97945
#
# 🔒 Licensed under the GNU GPLv3
# 🌐 https://www.gnu.org/licenses/gpl-3.0.html
# meta developer: @apodiktum_modules
# meta banner: https://t.me/apodiktum_dumpster/11
# meta pic: https://t.me/apodiktum_dumpster/13
# scope: hikka_only
# scope: hikka_min 1.3.3
import logging
from telethon.tl.types import Message, UpdateNewChannelMessage, MessageService
from telethon.tl.functions.messages import SetHistoryTTLRequest
from telethon.tl.functions.channels import GetFullChannelRequest
from .. import loader, utils
logger = logging.getLogger(__name__)
@loader.tds
class NoTTLMod(loader.Module):
"""
Send messages without TTL.
"""
strings = {
"name": "Apo-NoTTL",
"developer": "@anon97945",
"_cfg_cst_auto_migrate": "Wheather to auto migrate defined changes on startup.",
"_cmd_nottl": "Send a message without TTL. Can be used as a reply or with arguments.",
"_cmd_cnottl": "Open the config for the module.",
"no_args": "No args are given or not replied to a message...",
}
strings_en = {}
strings_de = {
"_cfg_cst_auto_migrate": "Ob Änderungen beim Start automatisch migriert werden sollen.",
"_cmd_notll": "Senden Sie eine Nachricht ohne TTL. Kann als Antwort oder mit Argumenten verwendet werden.",
"_cmd_cnottl": "Öffnen Sie die Konfiguration für das Modul.",
"no_args": "Keine Argumente angegeben oder nicht auf eine Nachricht geantwortet...",
}
strings_ru = {
"_cfg_cst_auto_migrate": "Автоматически мигрировать определенные изменения при запуске.",
"_cmd_notll": "Отправить сообщение без TTL. Может использоваться в качестве ответа или с аргументами.",
"_cmd_cnottl": "Открыть конфигурацию модуля.",
"no_args": "ргументы не указаны или не ответили на сообщение...",
}
all_strings = {
"strings": strings,
"strings_en": strings,
"strings_de": strings_de,
"strings_ru": strings_ru,
}
changes = {
}
def __init__(self):
self._ratelimit = []
self.config = loader.ModuleConfig(
loader.ConfigValue(
"auto_migrate",
True,
doc=lambda: self.strings("_cfg_cst_auto_migrate"),
validator=loader.validators.Boolean(),
), # for MigratorClas
)
async def client_ready(self):
self.apo_lib = await self.import_lib(
"https://raw.githubusercontent.com/anon97945/hikka-libs/master/apodiktum_library.py",
suspend_on_error=True,
)
await self.apo_lib.migrator.auto_migrate_handler(
self.__class__.__name__,
self.strings("name"),
self.changes,
self.config["auto_migrate"],
)
async def on_dlmod(self, client, _):
return
async def cnottlcmd(self, message: Message):
"""
This will open the config for the module.
"""
name = self.strings("name")
await self.allmodules.commands["config"](
await utils.answer(message, f"{self.get_prefix()}config {name}")
)
async def nottlcmd(self, message: Message):
"""
Command to send a message without TTL.
"""
args = utils.get_args_raw(message)
reply = await message.get_reply_message() if message.is_reply else None
if not args and not reply:
await utils.answer(
message,
self.apo_lib.utils.get_str("no_args", self.all_strings, message),
)
return
chat_id = utils.get_chat_id(message)
old_ttl = (await self.client(GetFullChannelRequest(chat_id))).full_chat.ttl_period
ttl_msg_id = await self._set_ttl(chat_id, 0)
await self.client.send_message(chat_id, reply if reply else args, reply_to=utils.get_topic(message))
restore_ttl_msg_id = await self._set_ttl(chat_id, old_ttl)
await self._client.delete_messages(chat_id, [ttl_msg_id, restore_ttl_msg_id, message.id])
async def _set_ttl(self, chat_id: int, ttl: int) -> int:
"""
Set the TTL for the chat and return the message ID of the TTL update.
"""
ttl_req = await self.client(SetHistoryTTLRequest(chat_id, ttl))
ttl_msg = next(
(update for update in ttl_req.updates if isinstance(update, UpdateNewChannelMessage) and isinstance(update.message, MessageService)),
None
)
return ttl_msg.message.id if ttl_msg else None