Перейти до змісту

wiki-bot — Telegram-бот для поповнення MkDocs-вікі

Джерело: raw/wiki-bot.zip — невеликий Python-проєкт, який користувач доопрацьовує. Особиста вікі на MkDocs Material, що поповнюється через Telegram-бота. Проєкт натхненний патерном llm-wiki (гіст Карпаті) — див. Персональна вікі.

Що всередині

  • bot.py (~200 рядків) — сам бот, див. wiki-bot.
  • mkdocs.yml — сайт «Моя Вікі», тема MkDocs Material, мова uk, світла/темна палітри indigo, пошук з lang: uk, навігація генерується автоматично з файлів у docs/.
  • docs/index.md — головна сторінка з інструкцією користування.
  • docs/inbox/, docs/files/ — порожні теки, куди бот пише записи та файли.
  • requirements.txt — mkdocs≥1.6, mkdocs-material≥9.5, aiogram≥3.13, httpx≥0.27, python-dotenv≥1.0.
  • .env.exampleBOT_TOKEN від @BotFather та ALLOWED_USER_IDS (порожній список = доступ усім; README не рекомендує).

Поведінка бота

Побудований на aiogram v3 (async, polling). Реалізує патерн швидкого захоплення в inbox:

Вхід Результат
Текст Сторінка в docs/inbox/ (перший рядок → заголовок, обрізаний до 80 символів)
Файл / фото / аудіо / відео / голос Файл у docs/files/ + сторінка-картка (зображення вбудовується, решта — посилання на завантаження)
Посилання (+ нотатка) Закладка: бот тягне <title> сторінки через httpx, зберігає URL і нотатку

Деталі реалізації:

  • slugify() робить безпечні kebab-case імена файлів, кирилиця зберігається.
  • unique_path() уникає перезапису: додає суфікс -2, -3, …
  • Кожна сторінка отримує шапку *Додано через Telegram · дата час*.
  • Авторизація: is_allowed() перевіряє Telegram ID проти ALLOWED_USER_IDS; /start показує користувачу його ID.
  • Заголовок закладки: <title> сторінки → нотатка → сам URL (fallback-ланцюжок).

Запуск

Два процеси паралельно: mkdocs serve (сайт на 127.0.0.1:8000, автоперезбирання) та python bot.py. README радить: git для бекапу, systemd/Планувальник завдань для автозапуску, mkdocs serve -a 0.0.0.0:8000 для доступу з телефона в локальній мережі.

Відкриті питання

Усі три питання нижче закриті 2026-07-09 доопрацьованою версією бота в bot/bot.py — див. wiki-bot, розділ «Відмінності від початкової версії». Тут збережено як опис стану джерела (zip лишається незмінним у raw/).

  • ~~Вікі бота і ця база знань — дві різні вікі~~ → потоки з'єднано: бот пише в raw/inbox/ та raw/files/ цієї бази.
  • ~~fetch_title() без обмеження розміру відповіді~~ → ліміт 64 КБ, лише HTML.
  • ~~Обробляється лише перший URL з повідомлення~~ → зберігаються всі URL.