Advertisement
disk6969

wa md

Jun 24th, 2025 (edited)
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.45 KB | None | 0 0
  1. from telethon.helpers import add_surrogate, del_surrogate, within_surrogate
  2. from telethon import types
  3.  
  4. DELIMITERS = {
  5.     types.MessageEntityBold: ('*', '*'),
  6.     types.MessageEntityItalic: ('_', '_'),
  7.     types.MessageEntityStrike: ('~', '~'),
  8.     types.MessageEntityCode: ('`', '`'),
  9.     types.MessageEntityBlockquote: ('> ', '')
  10. }
  11.  
  12. def whatsapp_unparse(raw_text, entities):
  13.     text = add_surrogate(raw_text)
  14.     insert_at = []
  15.  
  16.     for i, entity in enumerate(entities):
  17.         s = entity.offset
  18.         e = entity.offset + entity.length
  19.         delimiter = DELIMITERS.get(type(entity), None)
  20.         if delimiter:
  21.             insert_at.append((s, i, delimiter[0]))
  22.             insert_at.append((e, -i, delimiter[1]))
  23.  
  24.     insert_at.sort(key=lambda t: (t[0], t[1]))
  25.  
  26.     last_quote = None
  27.     while insert_at:
  28.         at, _, what = insert_at.pop()
  29.         while within_surrogate(text, at): at += 1
  30.        
  31.         if not what: last_quote = at  # quote end
  32.         if what == '> ' and last_quote: # quote start
  33.             swapped = (
  34.                 text[at:last_quote]
  35.                     .replace('\n\n', '\n') # clean empty newlines
  36.                     .replace('\n', '\n> ') # quote each newline
  37.             )
  38.             text = text[:at] + swapped  + text[last_quote:]
  39.         text = text[:at] + what + text[at:]
  40.     return del_surrogate(text)
  41.  
  42.  
  43. message = event / Message
  44. wa_text = whatsapp_unparse(message.raw_text, message.entities)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement