mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 17:57:11 +00:00
Move matrix services to separate module (#146161)
This commit is contained in:
parent
04c34877f4
commit
b4864e6a8a
@ -44,7 +44,8 @@ from homeassistant.helpers.json import save_json
|
|||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
from homeassistant.util.json import JsonObjectType, load_json_object
|
from homeassistant.util.json import JsonObjectType, load_json_object
|
||||||
|
|
||||||
from .const import DOMAIN, FORMAT_HTML, FORMAT_TEXT, SERVICE_SEND_MESSAGE
|
from .const import ATTR_FORMAT, ATTR_IMAGES, CONF_ROOMS_REGEX, DOMAIN, FORMAT_HTML
|
||||||
|
from .services import register_services
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -57,17 +58,11 @@ CONF_WORD: Final = "word"
|
|||||||
CONF_EXPRESSION: Final = "expression"
|
CONF_EXPRESSION: Final = "expression"
|
||||||
|
|
||||||
CONF_USERNAME_REGEX = "^@[^:]*:.*"
|
CONF_USERNAME_REGEX = "^@[^:]*:.*"
|
||||||
CONF_ROOMS_REGEX = "^[!|#][^:]*:.*"
|
|
||||||
|
|
||||||
EVENT_MATRIX_COMMAND = "matrix_command"
|
EVENT_MATRIX_COMMAND = "matrix_command"
|
||||||
|
|
||||||
DEFAULT_CONTENT_TYPE = "application/octet-stream"
|
DEFAULT_CONTENT_TYPE = "application/octet-stream"
|
||||||
|
|
||||||
MESSAGE_FORMATS = [FORMAT_HTML, FORMAT_TEXT]
|
|
||||||
DEFAULT_MESSAGE_FORMAT = FORMAT_TEXT
|
|
||||||
|
|
||||||
ATTR_FORMAT = "format" # optional message format
|
|
||||||
ATTR_IMAGES = "images" # optional images
|
|
||||||
|
|
||||||
WordCommand = NewType("WordCommand", str)
|
WordCommand = NewType("WordCommand", str)
|
||||||
ExpressionCommand = NewType("ExpressionCommand", re.Pattern)
|
ExpressionCommand = NewType("ExpressionCommand", re.Pattern)
|
||||||
@ -117,27 +112,12 @@ CONFIG_SCHEMA = vol.Schema(
|
|||||||
extra=vol.ALLOW_EXTRA,
|
extra=vol.ALLOW_EXTRA,
|
||||||
)
|
)
|
||||||
|
|
||||||
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 async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||||
"""Set up the Matrix bot component."""
|
"""Set up the Matrix bot component."""
|
||||||
config = config[DOMAIN]
|
config = config[DOMAIN]
|
||||||
|
|
||||||
matrix_bot = MatrixBot(
|
hass.data[DOMAIN] = MatrixBot(
|
||||||
hass,
|
hass,
|
||||||
os.path.join(hass.config.path(), SESSION_FILE),
|
os.path.join(hass.config.path(), SESSION_FILE),
|
||||||
config[CONF_HOMESERVER],
|
config[CONF_HOMESERVER],
|
||||||
@ -147,14 +127,8 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
config[CONF_ROOMS],
|
config[CONF_ROOMS],
|
||||||
config[CONF_COMMANDS],
|
config[CONF_COMMANDS],
|
||||||
)
|
)
|
||||||
hass.data[DOMAIN] = matrix_bot
|
|
||||||
|
|
||||||
hass.services.async_register(
|
register_services(hass)
|
||||||
DOMAIN,
|
|
||||||
SERVICE_SEND_MESSAGE,
|
|
||||||
matrix_bot.handle_send_message,
|
|
||||||
schema=SERVICE_SCHEMA_SEND_MESSAGE,
|
|
||||||
)
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -6,3 +6,8 @@ SERVICE_SEND_MESSAGE = "send_message"
|
|||||||
|
|
||||||
FORMAT_HTML = "html"
|
FORMAT_HTML = "html"
|
||||||
FORMAT_TEXT = "text"
|
FORMAT_TEXT = "text"
|
||||||
|
|
||||||
|
ATTR_FORMAT = "format" # optional message format
|
||||||
|
ATTR_IMAGES = "images" # optional images
|
||||||
|
|
||||||
|
CONF_ROOMS_REGEX = "^[!|#][^:]*:.*"
|
||||||
|
61
homeassistant/components/matrix/services.py
Normal file
61
homeassistant/components/matrix/services.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
"""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,
|
||||||
|
)
|
@ -1,6 +1,7 @@
|
|||||||
"""Configure and test MatrixBot."""
|
"""Configure and test MatrixBot."""
|
||||||
|
|
||||||
from homeassistant.components.matrix import DOMAIN, SERVICE_SEND_MESSAGE, MatrixBot
|
from homeassistant.components.matrix import MatrixBot
|
||||||
|
from homeassistant.components.matrix.const import DOMAIN, SERVICE_SEND_MESSAGE
|
||||||
from homeassistant.components.notify import DOMAIN as NOTIFY_DOMAIN
|
from homeassistant.components.notify import DOMAIN as NOTIFY_DOMAIN
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user