# Функция для вычисления дней до дня рождения def days_until_birthday(birthday: str) -> int: today = datetime.now() birthday_date = datetime.strptime(birthday, "%Y-%m-%d") current_year = today.year
# Если день рождения уже прошел в этом году, то берем следующий год if birthday_date.replace(year=current_year) < today: birthday_date = birthday_date.replace(year=current_year + 1)
return (birthday_date - today).days
# Команда /start async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: await update.message.reply_text("Привет! Укажите свою дату рождения в формате YYYY-MM-DD, чтобы я подсчитал, сколько осталось дней до нее.")
# Команда /birthday async def birthday(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: if context.args: birthday = context.args[0] try: days_left = days_until_birthday(birthday) await update.message.reply_text(f"До твоего дня рождения осталось {days_left} дней!") except ValueError: await update.message.reply_text("Пожалуйста, укажите дату в правильном формате YYYY-MM-DD.") else: await update.message.reply_text("Пожалуйста, укажите дату рождения после команды, например: /birthday 2000-12-31")
async def main() -> None: # Создаем приложение и передаем ему токен вашего бота application = ApplicationBuilder().token(TOKEN).build()
# Регистрация обработчиков команд application.add_handler(CommandHandler("start", start)) application.add_handler(CommandHandler("birthday", birthday))
# Запуск бота await application.run_polling()
if __name__ == '__main__': import asyncio asyncio.run(main())