62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
"""The Matrix bot component."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import voluptuous as vol
|
|
|
|
from homeassistant.components.notify import ATTR_DATA, ATTR_MESSAGE, ATTR_TARGET
|
|
from homeassistant.core import HomeAssistant, ServiceCall
|
|
from homeassistant.helpers import config_validation as cv
|
|
|
|
from .const import (
|
|
ATTR_FORMAT,
|
|
ATTR_IMAGES,
|
|
CONF_ROOMS_REGEX,
|
|
DOMAIN,
|
|
FORMAT_HTML,
|
|
FORMAT_TEXT,
|
|
SERVICE_SEND_MESSAGE,
|
|
)
|
|
|
|
if TYPE_CHECKING:
|
|
from . import MatrixBot
|
|
|
|
|
|
MESSAGE_FORMATS = [FORMAT_HTML, FORMAT_TEXT]
|
|
DEFAULT_MESSAGE_FORMAT = FORMAT_TEXT
|
|
|
|
|
|
SERVICE_SCHEMA_SEND_MESSAGE = vol.Schema(
|
|
{
|
|
vol.Required(ATTR_MESSAGE): cv.string,
|
|
vol.Optional(ATTR_DATA, default={}): {
|
|
vol.Optional(ATTR_FORMAT, default=DEFAULT_MESSAGE_FORMAT): vol.In(
|
|
MESSAGE_FORMATS
|
|
),
|
|
vol.Optional(ATTR_IMAGES): vol.All(cv.ensure_list, [cv.string]),
|
|
},
|
|
vol.Required(ATTR_TARGET): vol.All(
|
|
cv.ensure_list, [cv.matches_regex(CONF_ROOMS_REGEX)]
|
|
),
|
|
}
|
|
)
|
|
|
|
|
|
async def _handle_send_message(call: ServiceCall) -> None:
|
|
"""Handle the send_message service call."""
|
|
matrix_bot: MatrixBot = call.hass.data[DOMAIN]
|
|
await matrix_bot.handle_send_message(call)
|
|
|
|
|
|
def register_services(hass: HomeAssistant) -> None:
|
|
"""Set up the Matrix bot component."""
|
|
|
|
hass.services.async_register(
|
|
DOMAIN,
|
|
SERVICE_SEND_MESSAGE,
|
|
_handle_send_message,
|
|
schema=SERVICE_SCHEMA_SEND_MESSAGE,
|
|
)
|