oncall-engine/engine/apps/telegram/decorators.py
Vadim Stepanov 8b553ce735
Validate Slack and Telegram host env variables (#307)
* Validate Slack and Telegram host env variables

* remove ImproperlyConfigured usage, improve Telegram creds handling

* update TELEGRAM_WEBHOOK_HOST description
2022-08-02 12:57:12 +03:00

85 lines
2.3 KiB
Python

import logging
from functools import wraps
from telegram import error
from apps.telegram.client import TelegramClient
logger = logging.getLogger(__name__)
def handle_missing_token(f):
@wraps(f)
def decorated(*args, **kwargs):
try:
TelegramClient()
except error.InvalidToken as e:
logger.warning(
"Tried to initialize a Telegram client, but TELEGRAM_TOKEN live setting is invalid or missing. "
f"Exception: {e}"
)
return
else:
return f(*args, **kwargs)
return decorated
def ignore_bot_deleted(f):
@wraps(f)
def decorated(*args, **kwargs):
try:
return f(*args, **kwargs)
except error.Unauthorized:
logger.warning(f"Tried to send Telegram message, but user deleted the bot. args: {args}, kwargs: {kwargs}")
return decorated
def ignore_message_unchanged(f):
@wraps(f)
def decorated(*args, **kwargs):
try:
return f(*args, **kwargs)
except error.BadRequest as e:
if "Message is not modified" in e.message:
logger.warning(
f"Tried to change Telegram message, but update is identical to original message. "
f"args: {args}, kwargs: {kwargs}"
)
else:
raise e
return decorated
def ignore_message_to_edit_deleted(f):
@wraps(f)
def decorated(*args, **kwargs):
try:
return f(*args, **kwargs)
except error.BadRequest as e:
if "Message to edit not found" in e.message:
logger.warning(
f"Tried to edit Telegram message, but message was deleted. args: {args}, kwargs: {kwargs}"
)
else:
raise e
return decorated
def ignore_reply_to_message_deleted(f):
@wraps(f)
def decorated(*args, **kwargs):
try:
return f(*args, **kwargs)
except error.BadRequest as e:
if "Replied message not found" in e.message:
logger.warning(
f"Tried to reply to Telegram message, but message was deleted. args: {args}, kwargs: {kwargs}"
)
else:
raise e
return decorated