Skip to content

Commit 7c3824e

Browse files
authored
Merge pull request #2466 from pplulee/master
Add support for processing language parameter in message entities
2 parents 535b4cc + d25dae8 commit 7c3824e

File tree

2 files changed

+60
-34
lines changed

2 files changed

+60
-34
lines changed

telebot/formatting.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ def apply_html_entities(text: str, entities: Optional[List], custom_subs: Option
418418
utf16_text = text.encode("utf-16-le")
419419
html_text = ""
420420

421-
def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None):
421+
def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None, language=None):
422422
upd_text = upd_text.decode("utf-16-le")
423423
if subst_type == "text_mention":
424424
subst_type = "text_link"
@@ -431,6 +431,8 @@ def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None):
431431
subs = _subs.get(subst_type)
432432
if subst_type == "custom_emoji":
433433
return subs.format(text=upd_text, custom_emoji_id=custom_emoji_id)
434+
elif (subst_type == "pre") and language:
435+
return "<pre><code class=\"language-{0}\">{1}</code></pre>".format(language, upd_text)
434436
return subs.format(text=upd_text, url=url)
435437

436438
offset = 0
@@ -444,14 +446,16 @@ def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None):
444446
offset = entity.offset
445447

446448
new_string = func(utf16_text[offset * 2: (offset + entity.length) * 2], subst_type=entity.type,
447-
url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id)
449+
url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id,
450+
language=entity.language)
448451
start_index = len(html_text)
449452
html_text += new_string
450453
offset += entity.length
451454
end_index = len(html_text)
452455
elif entity.offset == offset:
453456
new_string = func(utf16_text[offset * 2: (offset + entity.length) * 2], subst_type=entity.type,
454-
url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id)
457+
url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id,
458+
language=entity.language)
455459
start_index = len(html_text)
456460
html_text += new_string
457461
end_index = len(html_text)
@@ -463,7 +467,8 @@ def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None):
463467
# And we don't change it).
464468
entity_string = html_text[start_index: end_index].encode("utf-16-le")
465469
formatted_string = func(entity_string, subst_type=entity.type, url=entity.url, user=entity.user,
466-
custom_emoji_id=entity.custom_emoji_id). \
470+
custom_emoji_id=entity.custom_emoji_id,
471+
language=entity.language). \
467472
replace("&amp;", "&").replace("&lt;", "<").replace("&gt;", ">")
468473
html_text = html_text[:start_index] + formatted_string + html_text[end_index:]
469474
end_index = len(html_text)

tests/test_telebot.py

Lines changed: 51 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ def test_message_listener(self):
4444
def listener(messages):
4545
assert len(messages) == 100
4646

47-
tb = telebot.TeleBot('')
47+
tb = telebot.TeleBot(TOKEN)
4848
tb.set_update_listener(listener)
4949

5050
def test_message_handler(self):
51-
tb = telebot.TeleBot('')
51+
tb = telebot.TeleBot(TOKEN)
5252
msg = self.create_text_message('/help')
5353

5454
@tb.message_handler(commands=['help', 'start'])
@@ -60,7 +60,7 @@ def command_handler(message):
6060
assert msg.text == 'got'
6161

6262
def test_message_handler_reg(self):
63-
bot = telebot.TeleBot('')
63+
bot = telebot.TeleBot(TOKEN)
6464
msg = self.create_text_message(r'https://web.telegram.org/')
6565

6666
# noinspection PyUnusedLocal
@@ -73,7 +73,7 @@ def command_url(message):
7373
assert msg.text == 'got'
7474

7575
def test_message_handler_lambda(self):
76-
bot = telebot.TeleBot('')
76+
bot = telebot.TeleBot(TOKEN)
7777
msg = self.create_text_message(r'lambda_text')
7878

7979
# noinspection PyUnusedLocal
@@ -86,7 +86,7 @@ def command_url(message):
8686
assert msg.text == 'got'
8787

8888
def test_message_handler_lambda_fail(self):
89-
bot = telebot.TeleBot('')
89+
bot = telebot.TeleBot(TOKEN)
9090
msg = self.create_text_message(r'text')
9191

9292
# noinspection PyUnusedLocal
@@ -99,7 +99,7 @@ def command_url(message):
9999
assert not msg.text == 'got'
100100

101101
def test_message_handler_reg_fail(self):
102-
bot = telebot.TeleBot('')
102+
bot = telebot.TeleBot(TOKEN)
103103
msg = self.create_text_message(r'web.telegram.org/')
104104

105105
# noinspection PyUnusedLocal
@@ -147,6 +147,7 @@ def test_send_file_with_filename(self):
147147
ret_msg = tb.send_document(CHAT_ID, file_data)
148148
assert ret_msg.message_id
149149

150+
file_data.seek(0)
150151
ret_msg = tb.send_document(CHAT_ID, file_data, visible_file_name="test.jpg")
151152
assert ret_msg.message_id
152153

@@ -529,28 +530,31 @@ def create_message_update(text):
529530
params = {'text': text}
530531
chat = types.User(11, False, 'test')
531532
message = types.Message(1, None, None, chat, 'text', params, "")
532-
edited_message = None
533-
channel_post = None
534-
edited_channel_post = None
535-
inline_query = None
536-
chosen_inline_result = None
537-
callback_query = None
538-
shipping_query = None
539-
pre_checkout_query = None
540-
poll = None
541-
poll_answer = None
542-
my_chat_member = None
543-
chat_member = None
544-
chat_join_request = None
545-
message_reaction = None
546-
message_reaction_count = None
547-
chat_boost = None
548-
chat_boost_removed = None
549-
purchased_paid_media = None
550-
return types.Update(-1001234038283, message, edited_message, channel_post, edited_channel_post, inline_query,
551-
chosen_inline_result, callback_query, shipping_query, pre_checkout_query, poll, poll_answer,
552-
my_chat_member, chat_member, chat_join_request, message_reaction, message_reaction_count, chat_boost, chat_boost_removed,
553-
purchased_paid_media)
533+
return types.Update(
534+
update_id=-1001234038283,
535+
message=message,
536+
edited_message=None,
537+
channel_post=None,
538+
edited_channel_post=None,
539+
inline_query=None,
540+
chosen_inline_result=None,
541+
callback_query=None,
542+
shipping_query=None,
543+
pre_checkout_query=None,
544+
poll=None,
545+
poll_answer=None,
546+
my_chat_member=None,
547+
chat_member=None,
548+
chat_join_request=None,
549+
message_reaction=None,
550+
message_reaction_count=None,
551+
chat_boost=None,
552+
removed_chat_boost=None,
553+
purchased_paid_media=None,
554+
business_message=None,
555+
business_connection=None,
556+
edited_business_message=None,
557+
deleted_business_messages=None, )
554558

555559
def test_is_string_unicode(self):
556560
s1 = u'string'
@@ -657,7 +661,7 @@ def test_typed_middleware_handler(self):
657661

658662
apihelper.ENABLE_MIDDLEWARE = True
659663

660-
tb = telebot.TeleBot('')
664+
tb = telebot.TeleBot(TOKEN)
661665
update = self.create_message_update('/help')
662666

663667
# noinspection PyUnusedLocal
@@ -678,7 +682,7 @@ def test_default_middleware_handler(self):
678682

679683
apihelper.ENABLE_MIDDLEWARE = True
680684

681-
tb = telebot.TeleBot('')
685+
tb = telebot.TeleBot(TOKEN)
682686
update = self.create_message_update('/help')
683687

684688
# noinspection PyUnusedLocal
@@ -703,3 +707,20 @@ def test_chat_permissions(self):
703707
#tb = telebot.TeleBot(TOKEN)
704708
#permissions = types.ChatPermissions(can_send_messages=True, can_send_polls=False)
705709
#msg = tb.set_chat_permissions(CHAT_ID, permissions)
710+
711+
def test_apply_html_entities(self):
712+
text = {
713+
"*bold*": "<b>bold</b>",
714+
"__italic__": "<u>italic</u>",
715+
"~strikethrough~": "<s>strikethrough</s>",
716+
"`inline code`": "<code>inline code</code>",
717+
"```\ncode block```": "<pre>code block</pre>",
718+
"```python\nprint('Hello, world!')\n```": "<pre><code class=\"language-python\">print('Hello, world!')</code></pre>",
719+
"```python\nprint(1 < 2)\n```": "<pre><code class=\"language-python\">print(1 &lt; 2)</code></pre>",
720+
"[link](http://example.com/)": "<a href=\"http://example.com/\">link</a>",
721+
">blockquote": "<blockquote>blockquote</blockquote>",
722+
}
723+
tb = telebot.TeleBot(TOKEN)
724+
for key, value in text.items():
725+
ret_msg = tb.send_message(CHAT_ID, text=key, parse_mode='MarkdownV2')
726+
assert telebot.formatting.apply_html_entities(ret_msg.text, ret_msg.entities, None) == value

0 commit comments

Comments
 (0)