Module notifly.telegram

Telegram Wrapper

Expand source code
""" Telegram Wrapper"""

import json
import os
import requests


class BotHandler:
    def __init__(self, token, dir_download= './downloads'):
        """
        Initialize the telegram client using tokens to access the HTTP API

        Args:
            token (string): API token [Mandatory].
        Args:
            dir_download (string): -> Storage location for dumping payload [default = "./downloads"]
        """
        self.token = token
        self.api_url = "https://api.telegram.org/bot{}/".format(token)
        self.file_url = "https://api.telegram.org/file/bot{}/".format(token)
        self.dirDownloads = dir_download

    def __get_updates(self, offset=0, timeout=10):
        """
        Get the latest updates as json file

        Args:
            offset (int): default value 0
            timeout (int): Timeout for the request post (default value 10)
        Returns:
            The json results
        Raises:
            TimeoutError
        """
        method = 'getUpdates'
        params = {'timeout': timeout, 'offset': offset}
        resp = requests.get(self.api_url + method, params)
        try:
            return resp.json()['result']
        except KeyError:
            print('TimeoutError')
            exit(1)

    def __chat_id_response(self) -> int:
        """
        Fetches the latest chat id from the client

        Returns:
            The latest chat-id of the client
        Raises:
            TimeoutError
        """
        try:
            fetch_updates = self.__get_updates()
            return fetch_updates[0]['message']['chat']['id']
        except TimeoutError as tm_err:
            print(tm_err)
            exit(1)

    def send_message(self, msg, notification=False) -> object:
        """
        Function to send message

        Args:
            msg (string): Enter the message to post
            notification (bool): Disable_Notification (default=False)
        Returns:
            The status_code of the post operation (send_message)
        Raises:
            IndexError
        """
        try:
            method = 'sendMessage'
            params = {'chat_id': self.__chat_id_response(), 'text': msg,
                      'parse_mode': 'HTML', 'disable_notification': notification}
            return requests.post(self.api_url + method, params)
        except IndexError:
            print('Time out error')
            exit(1)

    def send_image(self, img_path) -> object:
        """
        Function to send image via telegram

        Args:
            img_path (basestring): Enter the file_path to send the image file
        Returns:
            The status_code of the post operation (send_image)
        Raises:
            FileNotFoundError, InvalidFormatError
        """
        method = 'sendPhoto?' + 'chat_id=' + str(self.__chat_id_response())
        if img_path[-4:] in ['.jpg', '.png']:
            pass
        else:
            print('Invalid File Format, please use .jpg or .png format')
            exit(1)
        try:
            files = {'photo': open(img_path, 'rb')}
            return requests.post(self.api_url + method, files = files)
        except FileNotFoundError as fl_err:
            print(fl_err)
            exit(1)

    def send_file(self, file_path) -> object:
        """
        Function to send documents via telegram

        Args:
            file_path (basestring): Enter the file_path to send the image file
        Returns:
            The status_code of the post operation (send_document)
        Raises:
            FileNotFoundError, TimeoutError
        """
        method = 'sendDocument?' + 'chat_id=' + str(self.__chat_id_response())
        try:
            files = {'document': open(file_path, 'rb')}
            return requests.post(self.api_url + method, files = files)
        except FileNotFoundError as fn_err:
            print(fn_err)
            exit(1)
        except TimeoutError as tm_err:
            print(tm_err)
            exit(1)

    def session_dump(self) -> json:
        """
        Function to Dump all the data from the telegram client during the current session

        Returns:
            Dumps the session details in the form of json file.
        Raises:
            IOError
        """
        resp = self.__get_updates()
        try:
            if not os.path.exists(self.dirDownloads):
                os.mkdir(self.dirDownloads)
            local_path = os.path.join(self.dirDownloads, 'session_dump.json')

            with open(local_path, 'w+', encoding='utf-8') as outfile:
                json.dump(resp, outfile)
        except IOError as io_err:
            print(io_err)
            exit(1)

Classes

class BotHandler (token, dir_download='./downloads')

Initialize the telegram client using tokens to access the HTTP API

Args

token : string
API token [Mandatory].

Args

dir_download : string
-> Storage location for dumping payload [default = "./downloads"]
Expand source code
class BotHandler:
    def __init__(self, token, dir_download= './downloads'):
        """
        Initialize the telegram client using tokens to access the HTTP API

        Args:
            token (string): API token [Mandatory].
        Args:
            dir_download (string): -> Storage location for dumping payload [default = "./downloads"]
        """
        self.token = token
        self.api_url = "https://api.telegram.org/bot{}/".format(token)
        self.file_url = "https://api.telegram.org/file/bot{}/".format(token)
        self.dirDownloads = dir_download

    def __get_updates(self, offset=0, timeout=10):
        """
        Get the latest updates as json file

        Args:
            offset (int): default value 0
            timeout (int): Timeout for the request post (default value 10)
        Returns:
            The json results
        Raises:
            TimeoutError
        """
        method = 'getUpdates'
        params = {'timeout': timeout, 'offset': offset}
        resp = requests.get(self.api_url + method, params)
        try:
            return resp.json()['result']
        except KeyError:
            print('TimeoutError')
            exit(1)

    def __chat_id_response(self) -> int:
        """
        Fetches the latest chat id from the client

        Returns:
            The latest chat-id of the client
        Raises:
            TimeoutError
        """
        try:
            fetch_updates = self.__get_updates()
            return fetch_updates[0]['message']['chat']['id']
        except TimeoutError as tm_err:
            print(tm_err)
            exit(1)

    def send_message(self, msg, notification=False) -> object:
        """
        Function to send message

        Args:
            msg (string): Enter the message to post
            notification (bool): Disable_Notification (default=False)
        Returns:
            The status_code of the post operation (send_message)
        Raises:
            IndexError
        """
        try:
            method = 'sendMessage'
            params = {'chat_id': self.__chat_id_response(), 'text': msg,
                      'parse_mode': 'HTML', 'disable_notification': notification}
            return requests.post(self.api_url + method, params)
        except IndexError:
            print('Time out error')
            exit(1)

    def send_image(self, img_path) -> object:
        """
        Function to send image via telegram

        Args:
            img_path (basestring): Enter the file_path to send the image file
        Returns:
            The status_code of the post operation (send_image)
        Raises:
            FileNotFoundError, InvalidFormatError
        """
        method = 'sendPhoto?' + 'chat_id=' + str(self.__chat_id_response())
        if img_path[-4:] in ['.jpg', '.png']:
            pass
        else:
            print('Invalid File Format, please use .jpg or .png format')
            exit(1)
        try:
            files = {'photo': open(img_path, 'rb')}
            return requests.post(self.api_url + method, files = files)
        except FileNotFoundError as fl_err:
            print(fl_err)
            exit(1)

    def send_file(self, file_path) -> object:
        """
        Function to send documents via telegram

        Args:
            file_path (basestring): Enter the file_path to send the image file
        Returns:
            The status_code of the post operation (send_document)
        Raises:
            FileNotFoundError, TimeoutError
        """
        method = 'sendDocument?' + 'chat_id=' + str(self.__chat_id_response())
        try:
            files = {'document': open(file_path, 'rb')}
            return requests.post(self.api_url + method, files = files)
        except FileNotFoundError as fn_err:
            print(fn_err)
            exit(1)
        except TimeoutError as tm_err:
            print(tm_err)
            exit(1)

    def session_dump(self) -> json:
        """
        Function to Dump all the data from the telegram client during the current session

        Returns:
            Dumps the session details in the form of json file.
        Raises:
            IOError
        """
        resp = self.__get_updates()
        try:
            if not os.path.exists(self.dirDownloads):
                os.mkdir(self.dirDownloads)
            local_path = os.path.join(self.dirDownloads, 'session_dump.json')

            with open(local_path, 'w+', encoding='utf-8') as outfile:
                json.dump(resp, outfile)
        except IOError as io_err:
            print(io_err)
            exit(1)

Methods

def send_file(self, file_path) ‑> object

Function to send documents via telegram

Args

file_path : basestring
Enter the file_path to send the image file

Returns

The status_code of the post operation (send_document)

Raises

FileNotFoundError, TimeoutError

Expand source code
def send_file(self, file_path) -> object:
    """
    Function to send documents via telegram

    Args:
        file_path (basestring): Enter the file_path to send the image file
    Returns:
        The status_code of the post operation (send_document)
    Raises:
        FileNotFoundError, TimeoutError
    """
    method = 'sendDocument?' + 'chat_id=' + str(self.__chat_id_response())
    try:
        files = {'document': open(file_path, 'rb')}
        return requests.post(self.api_url + method, files = files)
    except FileNotFoundError as fn_err:
        print(fn_err)
        exit(1)
    except TimeoutError as tm_err:
        print(tm_err)
        exit(1)
def send_image(self, img_path) ‑> object

Function to send image via telegram

Args

img_path : basestring
Enter the file_path to send the image file

Returns

The status_code of the post operation (send_image)

Raises

FileNotFoundError, InvalidFormatError

Expand source code
def send_image(self, img_path) -> object:
    """
    Function to send image via telegram

    Args:
        img_path (basestring): Enter the file_path to send the image file
    Returns:
        The status_code of the post operation (send_image)
    Raises:
        FileNotFoundError, InvalidFormatError
    """
    method = 'sendPhoto?' + 'chat_id=' + str(self.__chat_id_response())
    if img_path[-4:] in ['.jpg', '.png']:
        pass
    else:
        print('Invalid File Format, please use .jpg or .png format')
        exit(1)
    try:
        files = {'photo': open(img_path, 'rb')}
        return requests.post(self.api_url + method, files = files)
    except FileNotFoundError as fl_err:
        print(fl_err)
        exit(1)
def send_message(self, msg, notification=False) ‑> object

Function to send message

Args

msg : string
Enter the message to post
notification : bool
Disable_Notification (default=False)

Returns

The status_code of the post operation (send_message)

Raises

IndexError

Expand source code
def send_message(self, msg, notification=False) -> object:
    """
    Function to send message

    Args:
        msg (string): Enter the message to post
        notification (bool): Disable_Notification (default=False)
    Returns:
        The status_code of the post operation (send_message)
    Raises:
        IndexError
    """
    try:
        method = 'sendMessage'
        params = {'chat_id': self.__chat_id_response(), 'text': msg,
                  'parse_mode': 'HTML', 'disable_notification': notification}
        return requests.post(self.api_url + method, params)
    except IndexError:
        print('Time out error')
        exit(1)
def session_dump(self) ‑> 

Function to Dump all the data from the telegram client during the current session

Returns

Dumps the session details in the form of json file.

Raises

IOError

Expand source code
def session_dump(self) -> json:
    """
    Function to Dump all the data from the telegram client during the current session

    Returns:
        Dumps the session details in the form of json file.
    Raises:
        IOError
    """
    resp = self.__get_updates()
    try:
        if not os.path.exists(self.dirDownloads):
            os.mkdir(self.dirDownloads)
        local_path = os.path.join(self.dirDownloads, 'session_dump.json')

        with open(local_path, 'w+', encoding='utf-8') as outfile:
            json.dump(resp, outfile)
    except IOError as io_err:
        print(io_err)
        exit(1)