diff --git a/telebot/formatting.py b/telebot/formatting.py index 801a67ec1..0e300f7c1 100644 --- a/telebot/formatting.py +++ b/telebot/formatting.py @@ -418,7 +418,7 @@ def apply_html_entities(text: str, entities: Optional[List], custom_subs: Option utf16_text = text.encode("utf-16-le") html_text = "" - def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None): + def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None, language=None): upd_text = upd_text.decode("utf-16-le") if subst_type == "text_mention": subst_type = "text_link" @@ -431,6 +431,8 @@ def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None): subs = _subs.get(subst_type) if subst_type == "custom_emoji": return subs.format(text=upd_text, custom_emoji_id=custom_emoji_id) + elif (subst_type == "pre") and language: + return "
{1}".format(language, upd_text)
return subs.format(text=upd_text, url=url)
offset = 0
@@ -444,14 +446,16 @@ def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None):
offset = entity.offset
new_string = func(utf16_text[offset * 2: (offset + entity.length) * 2], subst_type=entity.type,
- url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id)
+ url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id,
+ language=entity.language)
start_index = len(html_text)
html_text += new_string
offset += entity.length
end_index = len(html_text)
elif entity.offset == offset:
new_string = func(utf16_text[offset * 2: (offset + entity.length) * 2], subst_type=entity.type,
- url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id)
+ url=entity.url, user=entity.user, custom_emoji_id=entity.custom_emoji_id,
+ language=entity.language)
start_index = len(html_text)
html_text += new_string
end_index = len(html_text)
@@ -463,7 +467,8 @@ def func(upd_text, subst_type=None, url=None, user=None, custom_emoji_id=None):
# And we don't change it).
entity_string = html_text[start_index: end_index].encode("utf-16-le")
formatted_string = func(entity_string, subst_type=entity.type, url=entity.url, user=entity.user,
- custom_emoji_id=entity.custom_emoji_id). \
+ custom_emoji_id=entity.custom_emoji_id,
+ language=entity.language). \
replace("&", "&").replace("<", "<").replace(">", ">")
html_text = html_text[:start_index] + formatted_string + html_text[end_index:]
end_index = len(html_text)
diff --git a/tests/test_telebot.py b/tests/test_telebot.py
index 8b04ac402..f395ff9c5 100644
--- a/tests/test_telebot.py
+++ b/tests/test_telebot.py
@@ -44,11 +44,11 @@ def test_message_listener(self):
def listener(messages):
assert len(messages) == 100
- tb = telebot.TeleBot('')
+ tb = telebot.TeleBot(TOKEN)
tb.set_update_listener(listener)
def test_message_handler(self):
- tb = telebot.TeleBot('')
+ tb = telebot.TeleBot(TOKEN)
msg = self.create_text_message('/help')
@tb.message_handler(commands=['help', 'start'])
@@ -60,7 +60,7 @@ def command_handler(message):
assert msg.text == 'got'
def test_message_handler_reg(self):
- bot = telebot.TeleBot('')
+ bot = telebot.TeleBot(TOKEN)
msg = self.create_text_message(r'https://web.telegram.org/')
# noinspection PyUnusedLocal
@@ -73,7 +73,7 @@ def command_url(message):
assert msg.text == 'got'
def test_message_handler_lambda(self):
- bot = telebot.TeleBot('')
+ bot = telebot.TeleBot(TOKEN)
msg = self.create_text_message(r'lambda_text')
# noinspection PyUnusedLocal
@@ -86,7 +86,7 @@ def command_url(message):
assert msg.text == 'got'
def test_message_handler_lambda_fail(self):
- bot = telebot.TeleBot('')
+ bot = telebot.TeleBot(TOKEN)
msg = self.create_text_message(r'text')
# noinspection PyUnusedLocal
@@ -99,7 +99,7 @@ def command_url(message):
assert not msg.text == 'got'
def test_message_handler_reg_fail(self):
- bot = telebot.TeleBot('')
+ bot = telebot.TeleBot(TOKEN)
msg = self.create_text_message(r'web.telegram.org/')
# noinspection PyUnusedLocal
@@ -147,6 +147,7 @@ def test_send_file_with_filename(self):
ret_msg = tb.send_document(CHAT_ID, file_data)
assert ret_msg.message_id
+ file_data.seek(0)
ret_msg = tb.send_document(CHAT_ID, file_data, visible_file_name="test.jpg")
assert ret_msg.message_id
@@ -529,28 +530,31 @@ def create_message_update(text):
params = {'text': text}
chat = types.User(11, False, 'test')
message = types.Message(1, None, None, chat, 'text', params, "")
- edited_message = None
- channel_post = None
- edited_channel_post = None
- inline_query = None
- chosen_inline_result = None
- callback_query = None
- shipping_query = None
- pre_checkout_query = None
- poll = None
- poll_answer = None
- my_chat_member = None
- chat_member = None
- chat_join_request = None
- message_reaction = None
- message_reaction_count = None
- chat_boost = None
- chat_boost_removed = None
- purchased_paid_media = None
- return types.Update(-1001234038283, message, edited_message, channel_post, edited_channel_post, inline_query,
- chosen_inline_result, callback_query, shipping_query, pre_checkout_query, poll, poll_answer,
- my_chat_member, chat_member, chat_join_request, message_reaction, message_reaction_count, chat_boost, chat_boost_removed,
- purchased_paid_media)
+ return types.Update(
+ update_id=-1001234038283,
+ message=message,
+ edited_message=None,
+ channel_post=None,
+ edited_channel_post=None,
+ inline_query=None,
+ chosen_inline_result=None,
+ callback_query=None,
+ shipping_query=None,
+ pre_checkout_query=None,
+ poll=None,
+ poll_answer=None,
+ my_chat_member=None,
+ chat_member=None,
+ chat_join_request=None,
+ message_reaction=None,
+ message_reaction_count=None,
+ chat_boost=None,
+ removed_chat_boost=None,
+ purchased_paid_media=None,
+ business_message=None,
+ business_connection=None,
+ edited_business_message=None,
+ deleted_business_messages=None, )
def test_is_string_unicode(self):
s1 = u'string'
@@ -657,7 +661,7 @@ def test_typed_middleware_handler(self):
apihelper.ENABLE_MIDDLEWARE = True
- tb = telebot.TeleBot('')
+ tb = telebot.TeleBot(TOKEN)
update = self.create_message_update('/help')
# noinspection PyUnusedLocal
@@ -678,7 +682,7 @@ def test_default_middleware_handler(self):
apihelper.ENABLE_MIDDLEWARE = True
- tb = telebot.TeleBot('')
+ tb = telebot.TeleBot(TOKEN)
update = self.create_message_update('/help')
# noinspection PyUnusedLocal
@@ -703,3 +707,20 @@ def test_chat_permissions(self):
#tb = telebot.TeleBot(TOKEN)
#permissions = types.ChatPermissions(can_send_messages=True, can_send_polls=False)
#msg = tb.set_chat_permissions(CHAT_ID, permissions)
+
+ def test_apply_html_entities(self):
+ text = {
+ "*bold*": "bold",
+ "__italic__": "italic",
+ "~strikethrough~": "inline code",
+ "```\ncode block```": "code block", + "```python\nprint('Hello, world!')\n```": "
print('Hello, world!')",
+ "```python\nprint(1 < 2)\n```": "print(1 < 2)",
+ "[link](http://example.com/)": "link",
+ ">blockquote": "blockquote", + } + tb = telebot.TeleBot(TOKEN) + for key, value in text.items(): + ret_msg = tb.send_message(CHAT_ID, text=key, parse_mode='MarkdownV2') + assert telebot.formatting.apply_html_entities(ret_msg.text, ret_msg.entities, None) == value