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:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user