Source code for saltext.telegram.modules.telegram
"""
Module for sending messages via Telegram.
"""
import logging
from salt.exceptions import SaltInvocationError
try:
import requests
HAS_REQUESTS = True
except ImportError:
HAS_REQUESTS = False
log = logging.getLogger(__name__)
__virtualname__ = "telegram"
def __virtual__():
if not HAS_REQUESTS:
return (False, "Missing dependency requests")
return __virtualname__
def _get_chat_id():
"""
Retrieve and return the Telegram's configured chat id
:return: String: the chat id string
"""
chat_id = __salt__["config.get"]("telegram:chat_id") or __salt__["config.get"](
"telegram.chat_id"
)
if not chat_id:
raise SaltInvocationError("No Telegram chat id found")
return chat_id
def _get_token():
"""
Retrieve and return the Telegram's configured token
:return: String: the token string
"""
token = __salt__["config.get"]("telegram:token") or __salt__["config.get"]("telegram.token")
if not token:
raise SaltInvocationError("No Telegram token found")
return token
[docs]
def post_message(message, chat_id=None, token=None):
"""
Send a message to a Telegram chat.
:param message: The message to send to the Telegram chat.
:param chat_id: (optional) The Telegram chat id.
:param token: (optional) The Telegram API token.
:return: Boolean if message was sent successfully.
CLI Example:
.. code-block:: bash
salt '*' telegram.post_message message="Hello Telegram!"
"""
if not chat_id:
chat_id = _get_chat_id()
if not token:
token = _get_token()
if not message:
log.error("message is a required option.")
return _post_message(message=message, chat_id=chat_id, token=token)
def _post_message(message, chat_id, token):
"""
Send a message to a Telegram chat.
:param chat_id: The chat id.
:param message: The message to send to the Telegram chat.
:param token: The Telegram API token.
:return: Boolean if message was sent successfully.
"""
url = f"https://api.telegram.org/bot{token}/sendMessage"
parameters = {}
if chat_id:
parameters["chat_id"] = chat_id
if message:
parameters["text"] = message
try:
response = requests.post(url, data=parameters, timeout=120)
result = response.json()
log.debug("Raw response of the telegram request is %s", response)
except Exception: # pylint: disable=broad-except
log.exception("Sending telegram api request failed")
return False
# Check if the Telegram Bot API returned successfully.
if not result.get("ok", False):
log.debug(
"Sending telegram api request failed due to error %s (%s)",
result.get("error_code"),
result.get("description"),
)
return False
return True