mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-17 23:04:17 +02:00
Commited backup
This commit is contained in:
128
vsecoder/hikka_modules/formatter.py
Normal file
128
vsecoder/hikka_modules/formatter.py
Normal file
@@ -0,0 +1,128 @@
|
||||
"""
|
||||
_
|
||||
__ _____ ___ ___ ___ __| | ___ _ __
|
||||
\ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__|
|
||||
\ V /\__ \ __/ (_| (_) | (_| | __/ |
|
||||
\_/ |___/\___|\___\___/ \__,_|\___|_|
|
||||
|
||||
Copyleft 2022 t.me/vsecoder
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
||||
"""
|
||||
|
||||
# meta developer: @vsecoder_m
|
||||
# meta pic: https://img.icons8.com/fluency/344/pen-1.png
|
||||
# meta banner: https://chojuu.vercel.app/api/banner?img=https://img.icons8.com/fluency/344/pen-1.png&title=FormatterMod&description=Module%20for%20prettifying%20the%20formatting%20of%20messages
|
||||
|
||||
__version__ = (1, 0, 1)
|
||||
|
||||
import logging
|
||||
from .. import loader, utils # type: ignore
|
||||
|
||||
import datetime as dt
|
||||
import re
|
||||
from telethon.tl.types import Message
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _copy_tl(o, **kwargs):
|
||||
d = o.to_dict()
|
||||
del d["_"]
|
||||
d.update(kwargs)
|
||||
return o.__class__(**d)
|
||||
|
||||
|
||||
@loader.tds
|
||||
class FormatterMod(loader.Module):
|
||||
"""
|
||||
Module for prettifying the formatting of messages 🪛
|
||||
|
||||
📌 For example write:
|
||||
--------------------
|
||||
Hi, now is {now}, today is {today}, yesterday is {yesterday}, my id is {id}, username is @{username}...
|
||||
|
||||
⌨️ Keyboard:
|
||||
~
|
||||
📥 Modules $ https://t.me/vsecoder_m
|
||||
👨💻 Dev $ https://t.me/vsecoder
|
||||
--------------------
|
||||
|
||||
P.S. "~" is a separator for keyboard and message.
|
||||
"$" is a separator for button and link.
|
||||
|
||||
"""
|
||||
|
||||
strings = {"name": "Formatter"}
|
||||
|
||||
async def client_ready(self, client, db):
|
||||
self._client = client
|
||||
self.me = await client.get_me()
|
||||
self.html = await self.import_lib(
|
||||
"https://raw.githubusercontent.com/vsecoder/hikka_modules/main/libs/html2.py",
|
||||
suspend_on_error=True,
|
||||
)
|
||||
|
||||
async def watcher(self, message: Message):
|
||||
if (
|
||||
not isinstance(message, Message)
|
||||
or not message.out
|
||||
or message.text.split()
|
||||
and message.text.split()[0].lower() in self.allmodules.commands
|
||||
or utils.remove_html(message.text).startswith(self.get_prefix())
|
||||
):
|
||||
return
|
||||
|
||||
text = message.text
|
||||
|
||||
keyboard = []
|
||||
if len(text.split("\n~\n")) == 2:
|
||||
for key in message.raw_text.split("\n~\n")[1].split("\n"):
|
||||
if len(key.split(" $ ")) == 2:
|
||||
button = key.split(" $ ")[0]
|
||||
CLEANR = re.compile(
|
||||
"<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});"
|
||||
)
|
||||
link = re.sub(CLEANR, "", key.split(" $ ")[1])
|
||||
keyboard.append([{"text": button, "url": link}])
|
||||
|
||||
text = text.split("\n~\n")[0]
|
||||
|
||||
""" Deleted because of bugs
|
||||
raw_cut_text = message.raw_text.split("\n~\n")
|
||||
logger.error(str(raw_cut_text))
|
||||
|
||||
entities = self.html.parse(message.text)[1]
|
||||
|
||||
for entity in entities.copy():
|
||||
if not hasattr(entity, "offset") or not hasattr(entity, "length"):
|
||||
continue
|
||||
|
||||
if entity.offset > len(raw_cut_text):
|
||||
entities.remove(entity)
|
||||
continue
|
||||
|
||||
if entity.offset + entity.length > len(raw_cut_text):
|
||||
entities[entities.index(entity)] = _copy_tl(
|
||||
entity,
|
||||
length=len(raw_cut_text) - entity.offset,
|
||||
)
|
||||
|
||||
text = self.html.unparse(raw_cut_text, entities)
|
||||
"""
|
||||
|
||||
formats = {
|
||||
"{now}": dt.datetime.now(),
|
||||
"{today}": dt.date.today(),
|
||||
"{yesterday}": dt.date.today() - dt.timedelta(days=1),
|
||||
"{id}": self._client.tg_id,
|
||||
"{username}": self.me.username,
|
||||
"{phone}": self.me.phone,
|
||||
"{msg}": message,
|
||||
}
|
||||
|
||||
for key, value in formats.items():
|
||||
text = text.replace(key, utils.escape_html(value))
|
||||
|
||||
if text and text != message.text or keyboard and keyboard != [[]]:
|
||||
await utils.answer(message, text, reply_markup=keyboard)
|
||||
Reference in New Issue
Block a user