-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot.py
More file actions
70 lines (63 loc) · 2.79 KB
/
bot.py
File metadata and controls
70 lines (63 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import logging
import os
import sys
from time import sleep, time
import requests
import telegram
from dotenv import load_dotenv
logger = logging.getLogger(__name__)
URL = "https://dvmn.org/api/long_polling/"
PARAMS = {"timestamp": time()}
TIMEOUT = 120
def main():
load_dotenv()
devman_token = os.getenv("DEVMAN_TOKEN")
telegram_token = os.getenv("TELEGRAM_TOKEN")
telegram_chat_id = os.getenv("TELEGRAM_CHAT_ID")
headers = {"Authorization": f"Token {devman_token}"}
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(formatter)
logger.addHandler(handler)
bot = telegram.Bot(token=telegram_token)
logger.info(f"Инициализируем бота {bot}")
while True:
try:
response = requests.get(
URL, headers=headers, params=PARAMS, timeout=TIMEOUT)
response.raise_for_status()
check = response.json()
status = check.get("status")
if status == "timeout":
PARAMS["timestamp"] = check.get("timestamp_to_request")
logger.debug("В ответе отсутствуют новые статусы")
elif status == "found":
new_attempt = check["new_attempts"][0]
lesson_title = new_attempt['lesson_title']
lesson_url = new_attempt['lesson_url']
message = f'Работа "{lesson_title}" проверена.\n\n'
if new_attempt["is_negative"]:
message += f'Есть замечания. {lesson_url}'
else:
message += 'Замечаний нет. Работа принята.'
logger.info(f"Бот пытается отправить сообщение: {message}")
try:
bot.send_message(chat_id=telegram_chat_id, text=message)
except telegram.error.TelegramError as error:
logger.error(error)
logger.debug("Бот отправил сообщение")
PARAMS["timestamp"] = check.get("last_attempt_timestamp")
except requests.exceptions.HTTPError as err:
logger.error(f"Ошибка в процессе выполнения запроса: {err}")
sleep(5)
continue
except requests.exceptions.ReadTimeout as err:
logger.error(f"Ошибка таймаута {err}")
continue
except requests.exceptions.ConnectionError as err:
logger.error(f"Ошибка в процессе соединения с сервером: {err}")
sleep(5)
continue
if __name__ == "__main__":
main()