oncall-engine/engine/apps/telegram/decorators.py
Michael Derynck 6b40f95033 World, meet OnCall!
Co-authored-by: Eve832 <eve.meelan@grafana.com>
    Co-authored-by: Francisco Montes de Oca <nevermind89x@gmail.com>
    Co-authored-by: Ildar Iskhakov <ildar.iskhakov@grafana.com>
    Co-authored-by: Innokentii Konstantinov <innokenty.konstantinov@grafana.com>
    Co-authored-by: Julia <ferril.darkdiver@gmail.com>
    Co-authored-by: maskin25 <kengurek@gmail.com>
    Co-authored-by: Matias Bordese <mbordese@gmail.com>
    Co-authored-by: Matvey Kukuy <motakuk@gmail.com>
    Co-authored-by: Michael Derynck <michael.derynck@grafana.com>
    Co-authored-by: Richard Hartmann <richih@richih.org>
    Co-authored-by: Robby Milo <robbymilo@fastmail.com>
    Co-authored-by: Timur Olzhabayev <timur.olzhabayev@grafana.com>
    Co-authored-by: Vadim Stepanov <vadimkerr@gmail.com>
    Co-authored-by: Yulia Shanyrova <yulia.shanyrova@grafana.com>
2022-06-03 08:09:47 -06:00

86 lines
2.4 KiB
Python

import logging
from functools import wraps
from django.core.exceptions import ImproperlyConfigured
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 (ImproperlyConfigured, 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