Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from telethon.helpers import add_surrogate, del_surrogate, within_surrogate
- from telethon import types
- DELIMITERS = {
- types.MessageEntityBold: ('*', '*'),
- types.MessageEntityItalic: ('_', '_'),
- types.MessageEntityStrike: ('~', '~'),
- types.MessageEntityCode: ('`', '`'),
- types.MessageEntityBlockquote: ('> ', '')
- }
- def whatsapp_unparse(raw_text, entities):
- text = add_surrogate(raw_text)
- insert_at = []
- for i, entity in enumerate(entities):
- s = entity.offset
- e = entity.offset + entity.length
- delimiter = DELIMITERS.get(type(entity), None)
- if delimiter:
- insert_at.append((s, i, delimiter[0]))
- insert_at.append((e, -i, delimiter[1]))
- insert_at.sort(key=lambda t: (t[0], t[1]))
- last_quote = None
- while insert_at:
- at, _, what = insert_at.pop()
- while within_surrogate(text, at): at += 1
- if not what: last_quote = at # quote end
- if what == '> ' and last_quote: # quote start
- swapped = (
- text[at:last_quote]
- .replace('\n\n', '\n') # clean empty newlines
- .replace('\n', '\n> ') # quote each newline
- )
- text = text[:at] + swapped + text[last_quote:]
- text = text[:at] + what + text[at:]
- return del_surrogate(text)
- message = event / Message
- wa_text = whatsapp_unparse(message.raw_text, message.entities)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement