bot.tg.client.TgClient.get_url()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 9
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 9
rs 10
c 0
b 0
f 0
cc 1
nop 2
1
import requests
2
from requests import exceptions
3
4
from bot.tg.dc import (
5
    GetUpdatesResponse, SendMessageResponse,
6
    SendMessageResponseSchema, GetUpdatesResponseSchema
7
)
8
9
10
class TgClient:
11
    """Telegram клиент
12
13
    Args:
14
        token (str): токен для доступа к Telegram API
15
    """
16
    def __init__(self, token: str):
17
        self.token = token
18
19
    def get_url(self, method: str) -> str:
20
        """Возвращает URL для доступа к Telegram API
21
22
        Args:
23
            method (str): метод Telegram API
24
        Returns:
25
             str: URL
26
        """
27
        return f'https://api.telegram.org/bot{self.token}/{method}'
28
29
    def get_updates(self, offset: int = 0, timeout: int = 60) -> GetUpdatesResponse:
30
        """Реализует метод 'getUpdates' API
31
32
        Для получения входящих обновлений
33
34
        Args:
35
            offset (int): идентификатор первого возвращаемого обновления
36
            timeout (int): таймаут в секундах при использовании long polling.
37
                Должен быть больше нуля
38
        Returns:
39
             массив объектов класса Update, содержащий атрибуты принятого сообщения
40
        """
41
        url = self.get_url(method='getUpdates')
42
        try:
43
            response = requests.get(
44
                url=url,
45
                params={'offset': offset, 'timeout': timeout}
46
            )
47
        except exceptions.RequestException:
48
            raise exceptions.RequestException
49
        else:
50
            return GetUpdatesResponseSchema.load(response.json())
51
52
    def send_message(self, chat_id: int, text: str) -> SendMessageResponse:
53
        """Реализует метод 'sendMessage' API
54
55
        Для отправки сообщения участникам чата
56
57
        Args:
58
            chat_id (int): идентификатор чата или имя пользователя целевого чата
59
            text (str): текст сообщения
60
        Returns:
61
             объект класса Message, содержащий атрибуты отправленного сообщения
62
        """
63
        url = self.get_url(method='sendMessage')
64
        try:
65
            response = requests.get(
66
                url=url,
67
                params={'chat_id': chat_id, 'text': text}
68
            )
69
        except exceptions.RequestException:
70
            raise exceptions.RequestException
71
        else:
72
            return SendMessageResponseSchema.load(response.json())
73