diff --git a/homeassistant/components/telegram_bot/__init__.py b/homeassistant/components/telegram_bot/__init__.py index 7c03ecab271..cebdd4f4573 100644 --- a/homeassistant/components/telegram_bot/__init__.py +++ b/homeassistant/components/telegram_bot/__init__.py @@ -63,6 +63,7 @@ ATTR_PASSWORD = "password" ATTR_REPLY_TO_MSGID = "reply_to_message_id" ATTR_REPLYMARKUP = "reply_markup" ATTR_SHOW_ALERT = "show_alert" +ATTR_STICKER_ID = "sticker_id" ATTR_TARGET = "target" ATTR_TEXT = "text" ATTR_URL = "url" @@ -165,6 +166,10 @@ SERVICE_SCHEMA_SEND_FILE = BASE_SERVICE_SCHEMA.extend( } ) +SERVICE_SCHEMA_SEND_STICKER = SERVICE_SCHEMA_SEND_FILE.extend( + {vol.Optional(ATTR_STICKER_ID): cv.string} +) + SERVICE_SCHEMA_SEND_LOCATION = BASE_SERVICE_SCHEMA.extend( { vol.Required(ATTR_LONGITUDE): cv.template, @@ -228,7 +233,7 @@ SERVICE_SCHEMA_LEAVE_CHAT = vol.Schema({vol.Required(ATTR_CHAT_ID): vol.Coerce(i SERVICE_MAP = { SERVICE_SEND_MESSAGE: SERVICE_SCHEMA_SEND_MESSAGE, SERVICE_SEND_PHOTO: SERVICE_SCHEMA_SEND_FILE, - SERVICE_SEND_STICKER: SERVICE_SCHEMA_SEND_FILE, + SERVICE_SEND_STICKER: SERVICE_SCHEMA_SEND_STICKER, SERVICE_SEND_ANIMATION: SERVICE_SCHEMA_SEND_FILE, SERVICE_SEND_VIDEO: SERVICE_SCHEMA_SEND_FILE, SERVICE_SEND_VOICE: SERVICE_SCHEMA_SEND_FILE, @@ -371,7 +376,6 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: ) elif msgtype in [ SERVICE_SEND_PHOTO, - SERVICE_SEND_STICKER, SERVICE_SEND_ANIMATION, SERVICE_SEND_VIDEO, SERVICE_SEND_VOICE, @@ -380,6 +384,10 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: await hass.async_add_executor_job( partial(notify_service.send_file, msgtype, **kwargs) ) + elif msgtype == SERVICE_SEND_STICKER: + await hass.async_add_executor_job( + partial(notify_service.send_sticker, **kwargs) + ) elif msgtype == SERVICE_SEND_LOCATION: await hass.async_add_executor_job( partial(notify_service.send_location, **kwargs) @@ -797,6 +805,25 @@ class TelegramNotificationService: else: _LOGGER.error("Can't send file with kwargs: %s", kwargs) + def send_sticker(self, target=None, **kwargs): + """Send a sticker from a telegram sticker pack.""" + params = self._get_msg_kwargs(kwargs) + stickerid = kwargs.get(ATTR_STICKER_ID) + if stickerid: + for chat_id in self._get_target_chat_ids(target): + self._send_msg( + self.bot.send_sticker, + "Error sending sticker", + params[ATTR_MESSAGE_TAG], + chat_id=chat_id, + sticker=stickerid, + disable_notification=params[ATTR_DISABLE_NOTIF], + reply_markup=params[ATTR_REPLYMARKUP], + timeout=params[ATTR_TIMEOUT], + ) + else: + self.send_file(SERVICE_SEND_STICKER, target, **kwargs) + def send_location(self, latitude, longitude, target=None, **kwargs): """Send a location.""" latitude = float(latitude) diff --git a/homeassistant/components/telegram_bot/services.yaml b/homeassistant/components/telegram_bot/services.yaml index ea406cfdf96..6afd42dffb8 100644 --- a/homeassistant/components/telegram_bot/services.yaml +++ b/homeassistant/components/telegram_bot/services.yaml @@ -181,6 +181,12 @@ send_sticker: example: "/path/to/the/sticker.webp" selector: text: + sticker_id: + name: Sticker ID + description: ID of a sticker that exists on telegram servers + example: CAACAgIAAxkBAAEDDldhZD-hqWclr6krLq-FWSfCrGNmOQAC9gAD9HsZAAFeYY-ltPYnrCEE + selector: + text: username: name: Username description: Username for a URL which require HTTP authentication.