The user's previous answer is correct, but he forgot to mention the most important point - custom markdown.
```
from telethon.sync import TelegramClient
from telethon.extensions import markdown
from telethon import types
class CustomMarkdown:
@staticmethod
def parse(text):
text, entities = markdown.parse(text)
for i, e in enumerate(entities):
if isinstance(e, types.MessageEntityTextUrl):
if e.url == 'spoiler':
entities[i] = types.MessageEntitySpoiler(e.offset, e.length)
elif e.url.startswith('emoji/'):
try:
doc_id = int(e.url.split('/')[1])
entities[i] = types.MessageEntityCustomEmoji(e.offset, e.length, document_id=doc_id)
except (ValueError, IndexError):
pass
return text, entities
@staticmethod
def unparse(text, entities):
for i, e in enumerate(entities or []):
if isinstance(e, types.MessageEntityCustomEmoji):
entities[i] = types.MessageEntityTextUrl(e.offset, e.length, f'emoji/{e.document_id}')
if isinstance(e, types.MessageEntitySpoiler):
entities[i] = types.MessageEntityTextUrl(e.offset, e.length, 'spoiler')
return markdown.unparse(text, entities)
```
```
user_client = TelegramClient('user_session', API_ID, API_HASH)
user_client.parse_mode = CustomMarkdown()
```
**How to send premium emoji with Telethon client.**
1. Create custom parser:
```
from telethon.extensions import html
from telethon import types
class CustomHtml:
@staticmethod
def parse(text):
text, entities = html.parse(text)
for i, e in enumerate(entities):
if isinstance(e, types.MessageEntityTextUrl):
if e.url == 'spoiler':
entities[i] = types.MessageEntitySpoiler(e.offset, e.length)
elif e.url.startswith('emoji/'):
entities[i] = types.MessageEntityCustomEmoji(e.offset, e.length, int(e.url.split('/')[1]))
return text, entities
@staticmethod
def unparse(text, entities):
for i, e in enumerate(entities or []):
if isinstance(e, types.MessageEntityCustomEmoji):
entities[i] = types.MessageEntityTextUrl(e.offset, e.length, f'emoji/{e.document_id}')
if isinstance(e, types.MessageEntitySpoiler):
entities[i] = types.MessageEntityTextUrl(e.offset, e.length, 'spoiler')
return html.unparse(text, entities)
```
2. Set Telethon client`s parse mode:
```
client.parse_mode = CustomHtml()
```
3. **Following HTML tags will be parsed as premium emoji** when sending message *if account in use has active premium subscription*:
```
emoji_text = '<a href="emoji/{emoji_id}">{emoji_symbol}</a>'
await client.send_message(
entity=entity,
message=emoji_text
)
```