1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-15 07:36:16 +00:00

Fix parse_mode for Telegram bot actions (#162006)

This commit is contained in:
hanwg
2026-02-01 15:37:23 +08:00
committed by GitHub
parent d03d996155
commit c5fb2bd566
3 changed files with 53 additions and 8 deletions

View File

@@ -91,6 +91,10 @@ from .const import (
CONF_CONFIG_ENTRY_ID,
DEFAULT_API_ENDPOINT,
DOMAIN,
PARSER_HTML,
PARSER_MD,
PARSER_MD2,
PARSER_PLAIN_TEXT,
PLATFORM_BROADCAST,
PLATFORM_POLLING,
PLATFORM_WEBHOOKS,
@@ -119,11 +123,16 @@ _LOGGER = logging.getLogger(__name__)
CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
ATTR_PARSER_SCHEMA = vol.All(
cv.string,
vol.In([PARSER_HTML, PARSER_MD, PARSER_MD2, PARSER_PLAIN_TEXT]),
)
BASE_SERVICE_SCHEMA = vol.Schema(
{
vol.Optional(CONF_CONFIG_ENTRY_ID): cv.string,
vol.Optional(ATTR_TARGET): vol.All(cv.ensure_list, [vol.Coerce(int)]),
vol.Optional(ATTR_PARSER): cv.string,
vol.Optional(ATTR_PARSER): ATTR_PARSER_SCHEMA,
vol.Optional(ATTR_DISABLE_NOTIF): cv.boolean,
vol.Optional(ATTR_DISABLE_WEB_PREV): cv.boolean,
vol.Optional(ATTR_RESIZE_KEYBOARD): cv.boolean,
@@ -236,7 +245,7 @@ SERVICE_SCHEMA_EDIT_MESSAGE = vol.All(
cv.positive_int, vol.All(cv.string, "last")
),
vol.Required(ATTR_CHAT_ID): vol.Coerce(int),
vol.Optional(ATTR_PARSER): cv.string,
vol.Optional(ATTR_PARSER): ATTR_PARSER_SCHEMA,
vol.Optional(ATTR_KEYBOARD_INLINE): cv.ensure_list,
vol.Optional(ATTR_DISABLE_WEB_PREV): cv.boolean,
}
@@ -253,6 +262,7 @@ SERVICE_SCHEMA_EDIT_MESSAGE_MEDIA = vol.All(
),
vol.Required(ATTR_CHAT_ID): vol.Coerce(int),
vol.Optional(ATTR_CAPTION): cv.string,
vol.Optional(ATTR_PARSER): ATTR_PARSER_SCHEMA,
vol.Required(ATTR_MEDIA_TYPE): vol.In(
(
str(InputMediaType.ANIMATION),
@@ -279,6 +289,7 @@ SERVICE_SCHEMA_EDIT_CAPTION = vol.Schema(
vol.Required(ATTR_MESSAGEID): vol.Any(
cv.positive_int, vol.All(cv.string, "last")
),
vol.Optional(ATTR_PARSER): ATTR_PARSER_SCHEMA,
vol.Required(ATTR_CHAT_ID): vol.Coerce(int),
vol.Required(ATTR_CAPTION): cv.string,
vol.Optional(ATTR_KEYBOARD_INLINE): cv.ensure_list,

View File

@@ -674,6 +674,8 @@ class TelegramNotificationService:
"Error editing message media",
params[ATTR_MESSAGE_TAG],
media=media,
caption=kwargs.get(ATTR_CAPTION),
parse_mode=params[ATTR_PARSER],
chat_id=chat_id,
message_id=message_id,
inline_message_id=inline_message_id,

View File

@@ -18,7 +18,7 @@ from telegram import (
Message,
Update,
)
from telegram.constants import ChatType, InputMediaType, ParseMode
from telegram.constants import ChatType, InputMediaType
from telegram.error import (
InvalidToken,
NetworkError,
@@ -65,6 +65,9 @@ from homeassistant.components.telegram_bot.const import (
CHAT_ACTION_TYPING,
CONF_CONFIG_ENTRY_ID,
DOMAIN,
PARSER_HTML,
PARSER_MD,
PARSER_MD2,
PARSER_PLAIN_TEXT,
PLATFORM_BROADCAST,
SECTION_ADVANCED_SETTINGS,
@@ -139,7 +142,7 @@ async def test_polling_platform_init(
{
ATTR_KEYBOARD: ["/command1, /command2", "/command3"],
ATTR_MESSAGE: "test_message",
ATTR_PARSER: ParseMode.HTML,
ATTR_PARSER: PARSER_HTML,
ATTR_DISABLE_NOTIF: True,
ATTR_DISABLE_WEB_PREV: True,
ATTR_MESSAGE_TAG: "mock_tag",
@@ -1151,6 +1154,7 @@ async def test_edit_message_media(
ATTR_MESSAGEID: 12345,
ATTR_CHAT_ID: 123456,
ATTR_KEYBOARD_INLINE: "/mock",
ATTR_PARSER: PARSER_MD,
},
blocking=True,
)
@@ -1159,6 +1163,7 @@ async def test_edit_message_media(
mock.assert_called_once()
assert mock.call_args[1]["media"].__class__.__name__ == expected_media_class
assert mock.call_args[1]["media"].caption == "mock caption"
assert mock.call_args[1]["parse_mode"] == PARSER_MD
assert mock.call_args[1]["chat_id"] == 123456
assert mock.call_args[1]["message_id"] == 12345
assert mock.call_args[1]["reply_markup"] == InlineKeyboardMarkup(
@@ -1183,12 +1188,26 @@ async def test_edit_message(
await hass.services.async_call(
DOMAIN,
SERVICE_EDIT_MESSAGE,
{ATTR_MESSAGE: "mock message", ATTR_CHAT_ID: 123456, ATTR_MESSAGEID: 12345},
{
ATTR_MESSAGE: "mock message",
ATTR_CHAT_ID: 123456,
ATTR_MESSAGEID: 12345,
ATTR_PARSER: PARSER_PLAIN_TEXT,
},
blocking=True,
)
await hass.async_block_till_done()
mock.assert_called_once()
mock.assert_called_once_with(
"mock message",
chat_id=123456,
message_id=12345,
inline_message_id=None,
parse_mode=None,
disable_web_page_preview=None,
reply_markup=None,
read_timeout=None,
)
with patch(
"homeassistant.components.telegram_bot.bot.Bot.edit_message_caption",
@@ -1197,12 +1216,25 @@ async def test_edit_message(
await hass.services.async_call(
DOMAIN,
SERVICE_EDIT_CAPTION,
{ATTR_CAPTION: "mock caption", ATTR_CHAT_ID: 123456, ATTR_MESSAGEID: 12345},
{
ATTR_CAPTION: "mock caption",
ATTR_CHAT_ID: 123456,
ATTR_MESSAGEID: 12345,
ATTR_PARSER: PARSER_MD2,
},
blocking=True,
)
await hass.async_block_till_done()
mock.assert_called_once()
mock.assert_called_once_with(
chat_id=123456,
message_id=12345,
inline_message_id=None,
caption="mock caption",
reply_markup=None,
read_timeout=None,
parse_mode=PARSER_MD2,
)
with patch(
"homeassistant.components.telegram_bot.bot.Bot.edit_message_reply_markup",