#!/usr/bin/env python # # A library that provides a Python interface to the Telegram Bot API # Copyright (C) 2015-2018 # Leandro Toledo de Souza # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser Public License for more details. # # You should have received a copy of the GNU Lesser Public License # along with this program. If not, see [http://www.gnu.org/licenses/]. """This module contains an object that represents Telegram errors.""" def _lstrip_str(in_s, lstr): """ Args: in_s (:obj:`str`): in string lstr (:obj:`str`): substr to strip from left side Returns: str: """ if in_s.startswith(lstr): res = in_s[len(lstr):] else: res = in_s return res class TelegramError(Exception): def __init__(self, message): super(TelegramError, self).__init__() msg = _lstrip_str(message, 'Error: ') msg = _lstrip_str(msg, '[Error]: ') msg = _lstrip_str(msg, 'Bad Request: ') if msg != message: # api_error - capitalize the msg... msg = msg.capitalize() self.message = msg def __str__(self): return '%s' % (self.message) class Unauthorized(TelegramError): pass class InvalidToken(TelegramError): def __init__(self): super(InvalidToken, self).__init__('Invalid token') class NetworkError(TelegramError): pass class BadRequest(NetworkError): pass class TimedOut(NetworkError): def __init__(self): super(TimedOut, self).__init__('Timed out') class ChatMigrated(TelegramError): """ Args: new_chat_id (:obj:`int`): """ def __init__(self, new_chat_id): super(ChatMigrated, self).__init__('Group migrated to supergroup. New chat id: {}'.format(new_chat_id)) self.new_chat_id = new_chat_id class RetryAfter(TelegramError): """ Args: retry_after (:obj:`int`): """ def __init__(self, retry_after): super(RetryAfter, self).__init__('Flood control exceeded. Retry in {} seconds'.format(retry_after)) self.retry_after = float(retry_after)