Создание телеграм-бота на Python

Архив готового проекта:

Вам предстоит написать Телеграм-бота, который будет:

  • обращаться к API сервиса Практикум.Домашка;
  • узнавать, взята ли ваша домашка в ревью, проверена ли она, провалена или принята;
  • отправлять результат в ваш Телеграм-чат.

Проект

Ваш бот должен регулярно опрашивать API домашки и при получении обновлений парсить ответ и отправлять сообщение в ваш аккаунт Телеграм.

Механизм polling'а вам предстоит реализовать самостоятельно.

Бот должен логировать момент своего запуска (уровень DEBUG) и каждую отправку сообщения (уровень INFO). Сообщения уровня ERROR бот должен логировать и (дополнительно) отправлять вам в Телеграм.

Свой handler для логов писать не нужно, примените обработчики FileHandler и StreamHandler.

Подсказки, отладка

Параметр from_date передайте обычным параметром GET-запросом. Чтобы получить статусы домашек за всё время, параметр from_date должен быть равен нулю.

Для отладки можно использовать какое-нибудь фиксированное время, скажем «месяц назад», чтобы в ответ прилетала какая-нибудь старая домашка.

Прекод

import os
import time
import requests
import telegram
from dotenv import load_dotenv


load_dotenv()


PRAKTIKUM_TOKEN = os.getenv('PRAKTIKUM_TOKEN')
TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN')
CHAT_ID = os.getenv('TELEGRAM_CHAT_ID')


def parse_homework_status(homework):
    homework_name = ...
    if ...
        verdict = 'К сожалению, в работе нашлись ошибки.'
    else:
        verdict = 'Ревьюеру всё понравилось, работа зачтена!'
    return f'У вас проверили работу "{homework_name}"!\n\n{verdict}'


def get_homeworks(current_timestamp):
    homework_statuses = ...
    return homework_statuses.json()


def send_message(message):
    return bot.send_message(...)


def main():
    current_timestamp = int(time.time())  # Начальное значение timestamp

    while True:
        try:
            ...
            time.sleep(5 * 60)  # Опрашивать раз в пять минут

        except Exception as e:
            print(f'Бот упал с ошибкой: {e}')
            time.sleep(5)


if __name__ == '__main__':
    main() 



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий