Clopbot — форк nanobot: персональный AI-ассистент в Telegram с голосом, поиском, напоминаниями и прочим функционало.
- Основа: nanobot (лёгкий агент на LLM + инструменты).
- Бренд и поведение: Clopbot — бот для личных и групповых чатов, каналов, с русским языком и своим стилем.
Поддерживаются Gemini (рекомендуется), OpenRouter, Anthropic, OpenAI, локальный vLLM.
| Возможность | Описание |
|---|---|
| Чат в Telegram | Личка и группы: ответы на сообщения, reply под сообщение. |
| Триггеры в группах | Реагирует на «клоп», «clopbot», «бро», @упоминание бота или reply на его сообщение. |
| Inline-режим | В любом чате: @cloptbot_bot запрос — быстрый ответ с поиском (Brave или Gemini Google Search). Только для админов. |
| Голосовые | По запросу («ответь голосовым», «голосом») отправляет голосовое (Edge TTS, русский, скорость 1.2x). |
| Поиск | Brave Search (если есть API key) или встроенный поиск Gemini. |
| Напоминания (Cron) | «Напомни через 5 минут …», «напомни вечером @user сделать …» — бот пришлёт сообщение в указанное время в ЛС или чат. |
| Канал | Посты канала авто-приходят в чат обсуждений — бот пишет комментарий под пост (feedback), а не в сам канал. Сообщения «от имени канала» в чате требуют триггер. |
| Картинки | Анализ по явному запросу («что на картинке?», «опиши фото»). Изображения сжимаются перед отправкой в LLM. |
| Защита | В личке — whitelist по user ID (allowFrom). В группах/чатах — whitelist по chat ID (allowChats): бот отвечает только в разрешённых чатах. |
| Реакции | Ставит 👀 на сообщение, когда начинает обработку. |
| Память и контекст | Сессии по chat_id, ограниченная история, долгосрочная память (MEMORY.md), дневные заметки, персона (PERSONA.md), импорт истории канала (/init). |
- Анализ песен — по названию и исполнителю бот ищет текст, контекст и может дать краткий фидбек (через поиск/Genius и т.п.).
- Напоминания (remind) — создаёт задачу на указанное время; может отправить сообщение в нужный чат, тегнуть пользователя (@username), напомнить или «пнуть» в группе или в личку.
- Обработка изображений — по явному запросу («что на картинке?», «опиши фото»): сжатие (Pillow), затем анализ через vision-модель.
- Голосовой ввод и вывод — приём голосовых сообщений от пользователя; по запросу («ответь голосом», «голосом») отправка ответа голосом (Edge TTS, русский, 1.2x).
- Персонализация — стиль и характер задаются через
PERSONA.mdв workspace; агент может обновлять персону инструментом; в личке для владельца (allowFrom) — обращение на «ты». - Режимы работы — как личный ассистент (личка), как чат-помощник в группах (по триггерам), как бот канала для фидбека под постами в чате обсуждений.
- Telegram: триггеры (клоп/clopbot/бро/@/reply), разделение личка/группа/канал.
- Inline-режим: ответ в выпадающем меню с поиском (Brave или Gemini), только для админов.
- Cron-напоминания: «через N минут/часов», «вечером», «завтра» и т.д., доставка в нужный chat.
- Голос: Edge TTS, русский голос, скорость 1.2x, по явной просьбе.
- Картинки: только по явному запросу; сжатие (Pillow) перед отправкой в LLM.
- Канал: ответ только на реальные посты (auto-forward) в чат обсуждений комментарием; запись от имени канала в чате без триггера игнорируется.
- Whitelist чатов:
allowChats— список разрешённых chat_id для групп/супергрупп. - Лимиты контекста: 10 сообщений, 8K символов истории, чтобы реже таймауты.
- Реакции: 👀 на сообщение при старте обработки.
- Модель по умолчанию: заточен под Gemini (можно
gemini-2.5-flashв конфиге).
git clone https://github.com/ProximaCA/clopbot
cd clopbot
pip install -e .(Или установка из PyPI nanobot-ai и затем копирование/правка конфига под Clopbot.)
nanobot onboardОтредактируй ~/.nanobot/config.json:
{
"agents": {
"defaults": {
"model": "gemini-2.5-flash",
"maxTokens": 8192,
"temperature": 0.7
}
},
"providers": {
"gemini": {
"apiKey": "YOUR_GEMINI_API_KEY"
}
},
"channels": {
"telegram": {
"enabled": true,
"token": "YOUR_BOT_TOKEN",
"allowFrom": ["YOUR_TELEGRAM_USER_ID"],
"allowChats": ["-100374753293", "-10032326928590"]
}
},
"tools": {
"web": {
"search": {
"apiKey": ""
}
}
}
}- allowFrom — кто может писать в личку (user ID).
- allowChats — в каких группах/чатах бот отвечает (chat_id). Пустой = отвечает везде.
Узнать свой user ID: например, @userinfobot. Chat ID группы — из логов при сообщении в группе: Received message in chat_id=-1234567890.
Команда nanobot onboard создаёт конфиг и workspace — папку с данными агента (по умолчанию ~/.nanobot/workspace).
-
Workspace содержит:
- AGENTS.md, SOUL.md, USER.md — инструкции и описание пользователя.
- memory/ — долгосрочная память:
MEMORY.md(важные факты навсегда) и дневные заметкиmemory/YYYY-MM-DD.md. - PERSONA.md — персона и стиль ответов (агент может обновлять через инструмент).
- skills/ — кастомные навыки (SKILL.md в подпапках).
-
Память в работе агента:
- В системный промпт подставляются: долгосрочная память (MEMORY.md), сегодняшние заметки, персона. Агент может записывать важное через инструмент
add_to_memory. - История чата хранится отдельно по сессиям: один чат = один ключ
telegram:chat_id. Сессии лежат в~/.nanobot/sessions/*.jsonl. В контекст LLM попадает ограниченная история (последние сообщения и лимит символов), чтобы не перегружать запросы и избегать таймаутов. - Для канала: через /init можно загрузить экспорт (JSON) истории канала — бот использует это для контекста и стиля при фидбеке под постами.
- В системный промпт подставляются: долгосрочная память (MEMORY.md), сегодняшние заметки, персона. Агент может записывать важное через инструмент
Итого: долгосрочная память и персона живут в workspace; диалог с каждым чатом — в своей сессии с ограниченной историей.
nanobot gatewayБот подключается к Telegram и слушает сообщения.
В Telegram: @BotFather → твой бот → Bot Settings → Inline Mode → Turn on.
- «Привет» — обычный ответ.
- «Что на картинке?» + фото — анализ изображения (после сжатия).
- «Ответь голосовым: расскажи анекдот» — голосовое сообщение.
- «Напомни через 10 минут проверить деплой» — через 10 минут бот пришлёт напоминание в личный чат.
- С триггером: «Клоп что мы делаем вкратце» / «Clopbot review» / «бро как дела» / ответ (reply) на сообщение бота.
- Без триггера: «просто текст» — бот не отвечает.
- «Клоп напомни завтра @username выпустить подкаст» — напоминание с упоминанием в указанный чат.
- Ввести в поле сообщения:
@cloptbot_bot кто такой Ulysse— в выпадающем списке появится ответ с поиском (если настроен Brave или Gemini Search). Доступ только для user ID изallowFrom.
- Ты публикуешь пост в канал → он авто-пересылается в чат обсуждений → бот пишет комментарий под этим постом (краткий разбор/feedback).
- Ты пишешь в чате от имени канала (без триггера) → бот не отвечает. С триггером («клоп …») — отвечает как в обычной группе.
- /start — приветствие.
- /init — загрузка истории канала (прикрепляешь JSON экспорта) для контекста и стиля.
| Поле | Описание |
|---|---|
agents.defaults.model |
Модель LLM, например gemini-1.5-flash. |
providers.gemini.apiKey |
Ключ Gemini. |
channels.telegram.token |
Токен бота от BotFather. |
channels.telegram.allowFrom |
Список user ID для лички (и inline). |
channels.telegram.allowChats |
Список chat_id групп, где бот отвечает. Пустой = все чаты. |
tools.web.search.apiKey |
Brave Search (опционально, для быстрого inline). |
Файл: ~/.nanobot/config.json. После изменений перезапусти nanobot gateway.
| Команда | Описание |
|---|---|
nanobot onboard |
Создать конфиг и workspace |
nanobot gateway |
Запустить бота (Telegram + cron + heartbeat) |
nanobot agent -m "…" |
Разовый запрос к агенту |
nanobot agent |
Интерактивный чат в терминале |
nanobot status |
Статус конфига и ключей |
nanobot cron list |
Список напоминаний |
nanobot cron add --name "…" --message "…" --every 3600 |
Добавить периодическую задачу |
nanobot/
├── agent/ # Агент: loop, context, память, инструменты
├── channels/ # Telegram (сообщения, inline, голос, реакции)
├── cron/ # Напоминания и отложенные задачи
├── providers/ # LLM (LiteLLM: Gemini, OpenRouter, …)
├── session/ # Сессии по chat_id, лимиты истории
├── config/ # Схема и загрузка конфига
└── cli/ # Команды (gateway, agent, cron, …)
- Модель: для стабильной работы лучше
gemini-2.5-flash; превью-модели часто дают таймауты. - Inline: для быстрого поиска в inline желательно указать Brave API key в
tools.web.search.apiKey. - Группы: чтобы бот не отвечал в чужих чатах, заполни
allowChatsтолько своими chat_id.
Клопбот будет дорабатываться по мере необходимости.