Простой и надёжный Discord-бот для отслеживания активности участников сервера по 4 категориям.
Хранит очки по категориям для каждого пользователя:
- Текстовые каналы — максимум 15 очков
- Голосовые каналы — максимум 10 очков
- Ивенты — максимум 5 очков
- Другая активность — максимум 5 очков
- Максимум всего = 35 очков
Считает процент активности: percent = total_points / 35 * 100
Сравнивает с проходным баллом (по умолчанию 65%, можно менять).
- Python 3.8+
- Токен Discord-бота
cd discord_activity_botpip install -r requirements.txtcp .env.example .envОтредактируй .env и добавь свой токен:
DISCORD_TOKEN=твой_токен_здесь
python bot.pyЕсли всё работает, ты увидишь:
Logged in as BotName (id: 123456789)
Добавляет очки к текущему значению (не превышает максимум)
!add @user text 3 — добавить 3 очка в текст
!add @user voice 10 — добавить 10 очков в голос
!add @user events 5 — добавить 5 очков в события
!add @user other 2 — добавить 2 очка в другое
Установить точные значения для одной или нескольких категорий
!set @user text 12 voice 8 events 5 other 4 — установить всё сразу
!set @user text 15 — установить только текст
!set @user voice 10 events 3 — установить голос и события
Показать полную статистику пользователя
!score @user — показать статистику для пользователя
!score — показать свою статистику
Выведет:
Статистика для UserName:
Текст: 12/15
Голос: 8/10
Ивенты: 5/5
Другая активность: 2/5
Всего: 27/35 — 77.14%
Проходной балл: 65%
Статус: ПРОЙДЁТ ✅
Сбросить все очки пользователя на 0
!reset @user — сбросить для пользователя
!reset — сбросить свои очки
Установить проходной процент для сервера (только администраторы)
!setthreshold 70 — установить порог на 70%
!setthreshold 50 — установить порог на 50%
Показать справку по всем командам
!helpactivity
Бот использует SQLite (activity.db), которая создаётся автоматически.
Таблица users:
guild_id— ID сервера Discorduser_id— ID пользователяtext— очки за текстовые каналы (0-15)voice— очки за голосовые каналы (0-10)events— очки за события (0-5)other— очки за другую активность (0-5)threshold— проходной процент (по умолчанию 65)
✅ Локальное хранилище — все данные в SQLite, ничего в облаке ✅ Изолированность серверов — каждый Discord-сервер имеет свои данные ✅ Защита от переполнения — очки не превышают максимум ✅ Гибкий порог — администраторы могут менять проходной процент ✅ Просто и надёжно — минимум зависимостей, максимум функциональности
Бот умеет поддерживать «мысли» — внутренние краткие заметки о состоянии сервера, которые генерируются автоматически на основе агрегированной статистики (топы, средний балл, входы/выходы).
- Данные хранятся локально в
activity.db(таблицаthoughts) и не отправляются во внешние сервисы. 🔒 - Генерация мыслей выполняется только на основе агрегированных данных — сырые тексты сообщений не читаются и не отправляются.
- Доступ к созданию и просмотру мыслей имеют только администраторы сервера.
Команды:
!enable_thoughts— включить автогенерацию мыслей для сервера (только админ)!disable_thoughts— отключить (только админ)!set_thought_interval <секунд>— установить интервал генерации мыслей для сервера (15–1800 секунд, только админ)!think [текст]— добавить мысль вручную или сгенерировать автоматически (только админ)!thoughts [N]— показать последние N мыслей (по умолчанию 5, только админ)
В Telegram-панели появилась кнопка "💭 Просмотреть мысли" для каждого сервера, где можно просмотреть последние записи.
Если хочешь использовать внешний генератор (например, Gemini), добавь в .env:
EXTERNAL_AI_PROVIDER=gemini
EXTERNAL_AI_API_KEY=твой_api_key
# опционально: модель (по умолчанию models/gemini-pro)
EXTERNAL_AI_GEMINI_MODEL=models/gemini-pro
- Внешний вызов выполняется только при явном согласии автора сообщения (
!ai_consent external) или если админ сам запрашивает разовый анализ. - Никогда не публикуй ключи в репозитории — регенирай их при утечке.
Бот может анализировать изображения с помощью AI Vision моделей (Gemini 1.5 Flash / GPT-4o-mini).
Команды:
!analyze_image [вопрос]— проанализировать прикреплённое изображение!img [вопрос]— короткая версия команды!vision [вопрос]— альтернативная короткая версия!image_help— справка по анализу изображений
Как использовать:
- Прикрепи изображение к сообщению с командой
!img - Или ответь на сообщение с картинкой командой
!img - Добавь вопрос для конкретного анализа:
!img что это за порода собаки?
Настройка в .env:
# Vision модели (опционально)
EXTERNAL_AI_GEMINI_VISION_MODEL=models/gemini-1.5-flash
EXTERNAL_AI_VISION_MODEL=openai/gpt-4o-mini
Поддерживаемые форматы: JPEG, PNG, GIF, WebP (до 20MB)
Важно: Пользователь должен дать согласие: !ai_consent external
-
Перейди на Discord Developer Portal
-
Нажми New Application
-
Перейди на вкладку Bot → Add Bot
-
В TOKEN нажми Copy и вставь в
.env -
В INTENTS включи:
- ✅ Message Content Intent
- ✅ Server Members Intent
- ✅ Message Content Privileged Intent
-
В разделе OAuth2 → URL Generator:
- Выбери Scopes:
bot - Выбери Permissions:
- ✅ Send Messages
- ✅ Read Messages/View Channels
- ✅ Read Message History
- Выбери Scopes:
-
Скопируй сгенерированный URL и пригласи бота на свой сервер
# Добавляем очки участнику
!add @Alice text 10
!add @Bob voice 5
# Устанавливаем точные значения
!set @Charlie text 15 voice 10 events 5 other 5
# Проверяем результаты
!score @Alice
!score @Bob
!score @Charlie
# Изменяем проходной балл (только админ)
!setthreshold 70
# Сбрасываем всем
!reset @David- ПРОЙДЁТ ✅ — процент >= проходному баллу
- НЕ ПРОЙДЁТ ❌ — процент < проходному баллу
Проверь, что в .env установлена переменная DISCORD_TOKEN и файл находится в той же папке, что и bot.py.
Убедись, что в Discord Developer Portal включены Message Content Intent и Server Members Intent.
- Проверь, что бот имеет права на отправку сообщений в канал
- Убедись, что префикс команды правильный (по умолчанию
!) - Проверь консоль на ошибки
MIT License
Создано для надёжного отслеживания активности на Discord-серверах.