--- pageType: source id: source.skill title: SKILL sourceType: local-file sourcePath: /home/node/.openclaw/skills/diagram-table/SKILL.md ingestedAt: 2026-04-10T13:17:08.264Z updatedAt: 2026-04-10T13:17:08.264Z status: active --- # SKILL ## Source - Type: `local-file` - Path: `/home/node/.openclaw/skills/diagram-table/SKILL.md` - Bytes: 3890 - Updated: 2026-04-10T13:17:08.264Z ## Content ````text # SKILL.md — diagram-table ## Назначение Генерация таблиц в виде PNG-картинок для отправки в Telegram. Таблицы в текстовом формате плохо читаются в Telegram (моноширинный шрифт, смещения), поэтому конвертируем их в красивую картинку. --- ## Архитектура ``` Вход: JSON/текстовая таблица ↓ Генерация PNG (Pillow) ↓ Отправка в Telegram (или сохранение в файл) ``` --- ## Файлы - `SKILL.md` — этот файл - `scripts/generate_table.py` — генерация PNG из таблицы - `scripts/send_table.py` — отправка таблицы в Telegram --- ## generate_table.py **Вход (JSON):** ```json { "headers": ["Проект", "Статус", "Исполнитель"], "rows": [ ["Snowbike RAG", "active", "Dev-агент"], ["Noisemap FR24", "paused", "Слава"] ], "title": "Бэклог проектов", "width": 800, "theme": "dark" } ``` **Параметры:** - `headers` — список заголовков (обязательно) - `rows` — список строк (обязательно) - `title` — заголовок таблицы (опционально) - `width` — ширина картинки (по умолчанию 800) - `theme` — `dark` (по умолчанию) или `light` **Выход:** PNG файл **Цвета (dark theme):** - Фон: `#0d1117` - Заголовок: `#1a3a2a` (зелёный) - Чередование строк: `#161b22` / `#0d1117` - Текст: `#e6edf3` - Границы: `#30363d` **Цвета (light theme):** - Фон: `#ffffff` - Заголовок: `#238636` - Чередование строк: `#f6f8fa` / `#ffffff` - Текст: `#24292f` - Границы: `#d0d7de` --- ## send_table.py **Использование:** ```bash ./send_table.py "Бэклог" '{"headers":[...], "rows":[...]}' [BOT_TOKEN] [CHAT_ID] ``` **Или через stdin:** ```bash echo '{"headers":[...], "rows":[...]}' | ./send_table.py "Заголовок" ``` **Параметры:** - Аргумент 1: заголовок таблицы (или JSON, если 2 аргумента) - Аргумент 2: JSON (если 1й аргумент — заголовок) - BOT_TOKEN: из ~/.openclaw/.env если не передан - CHAT_ID: из ~/.openclaw/.env если не передан --- ## Пример использования в агенте ```python import subprocess import json table_data = { "headers": ["Проект", "Статус", "Исполнитель"], "rows": [ ["Snowbike RAG", "active", "Dev-агент"], ["Noisemap FR24", "paused", "Слава"] ], "title": "Бэклог проектов" } result = subprocess.run( ["python3", "skills/diagram-table/scripts/generate_table.py"], input=json.dumps(table_data), capture_output=True ) # result.stdout — путь к PNG файлу ``` --- ## Шрифты - Заголовок: DejaVu Sans Bold, 16px - Ячейки: DejaVu Sans, 14px - Путь к шрифтам: системные `/usr/share/fonts/truetype/dejavu/` или встроенный fallback --- ##Marginals - Минимум 1 колонка, 1 строка - Максимум 20 колонок, 100 строк - Если строк > 20 — разбивает на несколько страниц внутри одного PNG (часть N/M) - Высота картинки — автоматическая (по количеству строк) ## Ограничения send_table.py - BOT_TOKEN и CHAT_ID должны быть в `~/.openclaw/.env` - Формат: `TELEGRAM_BOT_TOKEN=`, `TELEGRAM_CHAT_ID=` ```` ## Notes ## Related ### Referenced By - [Skill: ontology](concepts/skill-ontology.md) - [Skill: telegram-collector](concepts/skill-telegram-collector.md) - [Skill: voice-tts](concepts/skill-voice-tts.md) - [Skills: diagram-png & diagram-table](concepts/skill-diagram.md) - [Skills: youtube-search & yandex-search](concepts/skill-search.md)