Repo Health

Рейтинг здоровья открытых репозиториев

Оценка от 0 до 100 по данным SourceCraft.

4 категории из 6, пересчёт раз в сутки. Как считается

  1. 26

    HTML415 дней назад0лайковСравнить
  2. 26

    Jupyter Notebook908 дней назад0лайковСравнить
  3. 26

    Задания для практических упражнений

    302 дня назад0лайковСравнить
  4. 12981–13478somerset917/igr
    26

    C#309 дней назад0лайковСравнить
  5. 26

    Шаблон хакатона ИИ ЧЕМП для кейса «Маскирование персональных данных» от Альфа‑Банка

    245 дней назад0лайковСравнить
  6. 26

    Шаблон хакатона ИИ ЧЕМП для кейса «Video RAG для онлайн-кинотеатра» от Окко

    245 дней назад0лайковСравнить
  7. 26

    Шаблон хакатона ИИ ЧЕМП для кейса «Матчинг номеров отелей» от Т‑Банка

    245 дней назад0лайковСравнить
  8. 26

    Шаблон хакатона ИИ ЧЕМП для кейса «3D-оптимизатор укладки паллет» от X5

    245 дней назад0лайковСравнить
  9. 26

    Шаблон хакатона ИИ ЧЕМП для кейса «Пользовательский ИИ-навык» от SourceCraft (Яндекс)

    245 дней назад0лайковСравнить
  10. 12981–13478sr-close/app
    26

    23 дня назад0лайковСравнить
  11. 12981–13478st-kraynov/docker
    26

    HTML415 дней назад0лайковСравнить
  12. 26

    srtj

    Python472 дня назад0лайковСравнить
  13. 26

    247 дней назад0лайковСравнить
  14. 12981–13478storie/su
    26

    24 дня назад0лайковСравнить
  15. 26

    HTML23 дня назад0лайковСравнить
  16. 26

    Веб-приложение для отказа от курения с системой физической ответственности: за каждую сигарету пользователь выполняет отжимания, количество которых растет каждую неделю. Включает личный кабинет, статистику, настройки и подписку.

    TypeScript62 дня назад0лайковСравнить
  17. 26

    HTML415 дней назад0лайковСравнить
  18. 12981–13478sziuzev/sbz
    26

    JavaScript584 дня назад0лайковСравнить
  19. 26

    import asyncio from datetime import datetime, date from aiogram import Bot, Dispatcher, F from aiogram.types import ( Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton ) # ================== НАСТРОЙКИ ================== BOT_TOKEN = "PASTE_YOUR_BOT_TOKEN" WORK_CHAT_ID = -1001111111111 # рабочий чат SUPERVISOR_ID = 222222222 # супервайзер CONTROL_TIMES = { "morning": "09:00", "day": "12:30", "evening": "17:00" } TERRITORIES = [ "Дмитров", "Долгопрудный", "Зеленоград", "Клин", "Митино", "Солнечногорск" ] # ================== ХРАНИЛИЩЕ (IN-MEMORY) ================== users = {} # user_id: {fio, territory} reports = {} # user_id: {date: {morning, day, evening}} discipline = {} # user_id: {late, missed} def today(): return date.today().isoformat() # ================== КНОПКИ ================== def territory_kb(): return InlineKeyboardMarkup( inline_keyboard=[ [InlineKeyboardButton(text=t, callback_data=f"territory:{t}")] for t in TERRITORIES ] ) def report_kb(): return InlineKeyboardMarkup( inline_keyboard=[ [InlineKeyboardButton(text="🌅 Утро", callback_data="report:morning")], [InlineKeyboardButton(text="🕧 День", callback_data="report:day")], [InlineKeyboardButton(text="🌙 Вечер", callback_data="report:evening")] ] ) # ================== BOT ================== bot = Bot(token=BOT_TOKEN) dp = Dispatcher() # ================== HANDLERS ================== @dp.message(F.text == "/start") async def start(msg: Message): await msg.answer( "👋 Добро пожаловать!\nВыберите территорию:", reply_markup=territory_kb() ) @dp.callback_query(F.data.startswith("territory:")) async def set_territory(cb: CallbackQuery): territory = cb.data.split(":")[1] users[cb.from_user.id] = { "fio": cb.from_user.full_name, "territory": territory } await cb.message.answer( f"📍 Территория закреплена: {territory}\n\n" f"Выберите тип отчета:", reply_markup=report_kb() ) await cb.answer() @dp.callback_query(F.data.startswith("report:")) async def submit_report(cb: CallbackQuery): report_type = cb.data.split(":")[1] uid = cb.from_user.id reports.setdefault(uid, {}).setdefault(today(), {}) reports[uid][today()][report_type] = True await cb.message.answer( f"✅ Отчет «{report_type.upper()}» принят" ) await bot.send_message( WORK_CHAT_ID, f"📊 Отчет сдан\n" f"👤 {users[uid]['fio']}\n" f"📍 {users[uid]['territory']}\n" f"🕘 Тип: {report_type}" ) await cb.answer() # ================== SCHEDULER ================== async def check_reports(): now = datetime.now().strftime("%H:%M") for report_type, control_time in CONTROL_TIMES.items(): if now == control_time: for uid, user in users.items(): user_reports = reports.get(uid, {}).get(today(), {}) if not user_reports.get(report_type): # личка ТП await bot.send_message( uid, f"❗ ВНИМАНИЕ\n\n" f"{user['fio']}, отчет НЕ СДАН\n" f"Тип: {report_type.upper()}\n" f"📍 Территория: {user['territory']}" ) # рабочий чат await bot.send_message( WORK_CHAT_ID, f"⏰ Контроль отчетов\n" f"❌ {user['fio']} — {user['territory']}\n" f"Отчет: {report_type.upper()}" ) # дисциплина discipline.setdefault(uid, {"late": 0, "missed": 0}) discipline[uid]["missed"] += 1 # эскалация await bot.send_message( SUPERVISOR_ID, f"🚨 ЭСКАЛАЦИЯ\n\n" f"ТП не сдал отчет:\n" f"{user['fio']} — {user['territory']}\n" f"Тип: {report_type.upper()}" ) async def scheduler(): while True: await check_reports() await asyncio.sleep(60) # ================== START ================== async def main(): asyncio.create_task(scheduler()) await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())

    Python309 дней назад0лайковСравнить
  20. 26

    HTML23 дня назад0лайковСравнить
  21. 26

    Создание лендинга с использованием современных технологий искусственного интеллекта

    HTML39 дней назад0лайковСравнить
  22. 26

    Supercharge your workflow automation with this curated collection of n8n templates! Instantly connect your favorite apps-like Gmail, Telegram, Google Drive, Slack, and more-with ready-to-use, AI-powered automations. Save time, boost productivity, and unlock the true potential of n8n in just a few clicks.

    514 дней назад0лайковСравнить
  23. 12981–13478tdanil776/day-10
    26

    323 дня назад0лайковСравнить
  24. 26

    329 дней назад0лайковСравнить
  25. 26

    323 дня назад0лайковСравнить
Показать ещё 0

13 376–13 400 из 21 931

Выбран 1 — нужен ещё один
Очистить