from hikkatl.types import Message, PeerUser, PeerChat, PeerChannel
import hikkatl.utils as TelethonUtils
from .. import loader, utils
"""
███ ███ ██ ██ ██████ ██ ██ ██ ██████ ███████ ███████
████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ████ ██ ██ ██ ██████ ██ ██ ██ ██ ██ ███████ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██████ ██ ██ ██████ ███████ ██████ ███████ ███████
PinMoreChats
📜 Licensed under the GNU AGPLv3
"""
# meta desc: desc
# meta developer: @BruhHikkaModules
@loader.tds
class PinMoreChats(loader.Module):
async def client_ready(self, db, client):
self.db = db
self._chats = self.pointer("chats", [])
strings = {
"name": "PinMoreChats",
"_cls_doc": " - Allows you to bookmark more than 5 or 10 chats (WARNING! IT DOES NOT PIN CHATS IN TELEGRAM, IT JUST MAKES A LIST OF YOUR CHATS ANCHORED BY THIS MODULE, REMINDER, USERBOT CAN NO MORE THAN YOU CAN)",
"added": " ✅ Added chat {} {} ",
"aleardy_in": " ‼️ This chat is already in the pinned",
"aleardy_not_in": " ‼️ This chat is not in the pinned",
"deleted": " ⚠️ Chat removed from pinned",
"pinned": "Pinned chats:\n\n",
}
strings_ru = {
"_cls_doc": "Позволяет закрепить больше чем 5 или 10 чатов (ПРЕДУПРЕЖДЕНИЕ! ОНО НЕ ЗАКРЕПЛЯЕТ ЧАТЫ В ТЕЛЕГРАММЕ, А ПРОСТО ДЕЛАЕТ СПИСОК ИЗ ВАШИХ ЧАТОВ ЗАКРЕПЛЁННЫМ ЭТИМ МОДУЛЕМ, НАПОМИНАЮ, ЮЗЕРБОТ МОЖЕТ НЕ БОЛЬШЕ ЧЕМ ВЫ<)",
"added": " ✅ Добавлен чат {} {} ",
"aleardy_in": " ‼️ Этот чат уже есть в закрепленных",
"aleardy_not_in": " ‼️ Этого чата нет в закрепленных",
"deleted": " ⚠️ Чат удалён из закреплённых",
"pinned": "Закреплённые чаты:\n\n",
}
@loader.command(
ru_doc=" - Добавить чат в закреплённых",
)
async def pinchat(self, message: Message):
"""- Add chat to pinned"""
peer = TelethonUtils.get_peer(message.peer_id)
added = "maybe error in code, but i dont care"
if message.chat_id in self._chats:
await utils.answer(message, self.strings("aleardy_in"))
return
self._chats.append(message.chat_id)
entity = await self.client.get_entity(message.chat_id)
if isinstance(peer, PeerUser):
added = self.strings("added").format(message.chat_id, entity.first_name)
elif isinstance(peer, PeerChat) or isinstance(peer, PeerChannel):
added = self.strings("added").format(message.chat_id, entity.title)
await utils.answer(message, added)
@loader.command(ru_doc=" - Удалить чат из закреплённых")
async def unpinchat(self, message):
"""- Remove chat from pinned"""
if message.chat_id not in self._chats:
await utils.answer(message, self.strings("aleardy_not_in"))
return
self._chats.remove(message.chat_id)
await utils.answer(message, self.strings("deleted"))
@loader.command(ru_doc=" - Посмотреть закреплённые чаты")
async def listpinchats(self, message):
"""- View pinned chats"""
name = ""
chats = ""
for chat in self._chats:
peer = TelethonUtils.get_peer(chat)
chat_id = ""
try:
entity = await self.client.get_entity(int(chat))
except ValueError:
name = "Чат не найден"
try:
chat_id = chat.replace(
-100,
)
except Exception:
pass # просто если нету -100 то и не надо
try:
if isinstance(peer, PeerUser):
name = entity.first_name
elif isinstance(peer, PeerChat):
name = entity.title
elif isinstance(peer, PeerChannel):
name = entity.title
else:
name = entity.title
except Exception:
pass
messages = await self.client.get_messages(chat_id, limit=1)
max_message_id = messages[0].id
chats += f"{name}\n"
await utils.answer(
message, self.strings("pinned") + chats
) # Почему через плюс? Потому что f-string ругается SyntaxError: f-string: unmatched '('
@loader.command(ru_doc=" - FAQ по модулю")
async def pmcfaq(self, message):
"""- FAQ for module"""