diff --git a/homeassistant/components/telegram_bot/__init__.py b/homeassistant/components/telegram_bot/__init__.py index b629f306dae..943efe00751 100644 --- a/homeassistant/components/telegram_bot/__init__.py +++ b/homeassistant/components/telegram_bot/__init__.py @@ -63,6 +63,7 @@ from .const import ( ATTR_PASSWORD, ATTR_QUESTION, ATTR_REACTION, + ATTR_REPLY_TO_MSGID, ATTR_RESIZE_KEYBOARD, ATTR_SHOW_ALERT, ATTR_STICKER_ID, @@ -126,21 +127,26 @@ BASE_SERVICE_SCHEMA = vol.Schema( vol.Optional(ATTR_TIMEOUT): cv.positive_int, vol.Optional(ATTR_MESSAGE_TAG): cv.string, vol.Optional(ATTR_MESSAGE_THREAD_ID): vol.Coerce(int), - }, - extra=vol.ALLOW_EXTRA, + } ) SERVICE_SCHEMA_SEND_MESSAGE = vol.All( cv.deprecated(ATTR_TIMEOUT), BASE_SERVICE_SCHEMA.extend( - {vol.Required(ATTR_MESSAGE): cv.string, vol.Optional(ATTR_TITLE): cv.string} + { + vol.Required(ATTR_MESSAGE): cv.string, + vol.Optional(ATTR_TITLE): cv.string, + vol.Optional(ATTR_REPLY_TO_MSGID): vol.Coerce(int), + } ), ) SERVICE_SCHEMA_SEND_CHAT_ACTION = vol.All( cv.deprecated(ATTR_TIMEOUT), - BASE_SERVICE_SCHEMA.extend( + vol.Schema( { + vol.Optional(CONF_CONFIG_ENTRY_ID): cv.string, + vol.Optional(ATTR_TARGET): vol.All(cv.ensure_list, [vol.Coerce(int)]), vol.Required(ATTR_CHAT_ACTION): vol.In( ( CHAT_ACTION_TYPING, @@ -156,6 +162,7 @@ SERVICE_SCHEMA_SEND_CHAT_ACTION = vol.All( CHAT_ACTION_UPLOAD_VIDEO_NOTE, ) ), + vol.Optional(ATTR_MESSAGE_THREAD_ID): vol.Coerce(int), } ), ) @@ -169,6 +176,7 @@ SERVICE_SCHEMA_BASE_SEND_FILE = BASE_SERVICE_SCHEMA.extend( vol.Optional(ATTR_PASSWORD): cv.string, vol.Optional(ATTR_AUTHENTICATION): cv.string, vol.Optional(ATTR_VERIFY_SSL): cv.boolean, + vol.Optional(ATTR_REPLY_TO_MSGID): vol.Coerce(int), } ) @@ -188,6 +196,7 @@ SERVICE_SCHEMA_SEND_LOCATION = vol.All( { vol.Required(ATTR_LONGITUDE): cv.string, vol.Required(ATTR_LATITUDE): cv.string, + vol.Optional(ATTR_REPLY_TO_MSGID): vol.Coerce(int), } ), ) @@ -205,18 +214,25 @@ SERVICE_SCHEMA_SEND_POLL = vol.All( vol.Optional(ATTR_ALLOWS_MULTIPLE_ANSWERS, default=False): cv.boolean, vol.Optional(ATTR_DISABLE_NOTIF): cv.boolean, vol.Optional(ATTR_MESSAGE_THREAD_ID): vol.Coerce(int), + vol.Optional(ATTR_REPLY_TO_MSGID): vol.Coerce(int), } ), ) SERVICE_SCHEMA_EDIT_MESSAGE = vol.All( cv.deprecated(ATTR_TIMEOUT), - SERVICE_SCHEMA_BASE_SEND_FILE.extend( + vol.Schema( { + vol.Optional(CONF_CONFIG_ENTRY_ID): cv.string, + vol.Optional(ATTR_TITLE): cv.string, + vol.Required(ATTR_MESSAGE): cv.string, vol.Required(ATTR_MESSAGEID): vol.Any( 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_KEYBOARD_INLINE): cv.ensure_list, + vol.Optional(ATTR_DISABLE_WEB_PREV): cv.boolean, } ), ) diff --git a/homeassistant/components/telegram_bot/bot.py b/homeassistant/components/telegram_bot/bot.py index 9cd3f001266..325aa7ffbc6 100644 --- a/homeassistant/components/telegram_bot/bot.py +++ b/homeassistant/components/telegram_bot/bot.py @@ -783,6 +783,7 @@ class TelegramNotificationService: None, chat_id=chat_id, action=chat_action, + message_thread_id=kwargs.get(ATTR_MESSAGE_THREAD_ID), context=context, ) result[chat_id] = is_successful diff --git a/tests/components/telegram_bot/test_telegram_bot.py b/tests/components/telegram_bot/test_telegram_bot.py index a974685dbd7..1118dea6c59 100644 --- a/tests/components/telegram_bot/test_telegram_bot.py +++ b/tests/components/telegram_bot/test_telegram_bot.py @@ -158,7 +158,6 @@ async def test_polling_platform_init( ( SERVICE_SEND_LOCATION, { - ATTR_MESSAGE: "test_message", ATTR_MESSAGE_THREAD_ID: "123", ATTR_LONGITUDE: "1.123", ATTR_LATITUDE: "1.123", @@ -414,6 +413,7 @@ async def test_send_chat_action( CONF_CONFIG_ENTRY_ID: mock_broadcast_config_entry.entry_id, ATTR_TARGET: [123456], ATTR_CHAT_ACTION: CHAT_ACTION_TYPING, + ATTR_MESSAGE_THREAD_ID: 123, }, blocking=True, return_response=True, @@ -421,7 +421,9 @@ async def test_send_chat_action( await hass.async_block_till_done() mock.assert_called_once() - mock.assert_called_with(chat_id=123456, action=CHAT_ACTION_TYPING) + mock.assert_called_with( + chat_id=123456, action=CHAT_ACTION_TYPING, message_thread_id=123 + ) @pytest.mark.parametrize( @@ -1505,7 +1507,6 @@ async def test_set_message_reaction( SERVICE_SEND_LOCATION, { ATTR_TARGET: 654321, - ATTR_MESSAGE: "test_message", ATTR_MESSAGE_THREAD_ID: "123", ATTR_LONGITUDE: "1.123", ATTR_LATITUDE: "1.123",