Утилита для автоматического выключения уведомлений Telegram групп до следующего рабочего дня.
Telegram Muter — это Python-приложение, которое подключается к Telegram API и выключает уведомления во всех группах до начала следующего рабочего дня. Приложение поддерживает сложную логику определения рабочих дней с учетом выходных, рабочих выходных и нерабочих будней.
-
Мульти-расписания с наследованием:
- Создание нескольких именованных расписаний
- Наследование расписаний от родительских с возможностью переопределения любых свойств
- Настройка различных расписаний для разных групп по имени или регулярному выражению
-
Умное определение следующего рабочего дня с учетом:
- Обычных выходных дней (по умолчанию суббота и воскресенье)
- Рабочих выходных (например, рабочая суббота)
- Нерабочих будней (например, праздничные дни)
- Временных зон
- Времени начала и окончания рабочего дня
-
Поддержка различных типов чатов:
- Обычные группы (Chat)
- Супергруппы и каналы (Channel)
- Автоматическое пропуск личных чатов
-
Два режима работы:
mute— выключение уведомлений до следующего рабочего дня (с учетом индивидуальных расписаний групп)unmute— включение уведомлений для чатов, заглушенных до начала следующего рабочего дня
-
Защита от заглушения во время рабочих часов:
- Автоматическая проверка, не находимся ли мы в рабочее время (между
start_of_dayиend_of_day) - Параметр
--finish-the-dayдля принудительного заглушения в конце дня
- Автоматическая проверка, не находимся ли мы в рабочее время (между
-
Поддержка русских и английских названий дней недели
-
Обработка rate limiting от Telegram API
-
Пропуск уже заглушенных групп
-
Подробное логирование процесса
- Если текущее время меньше
start_of_dayв указанной временной зоне, тоначальный день= сегодня, иначе завтра. - Если день недели
начального дняуказан вweekends, то этовыходной, иначе этобудний день. - Если это
выходнойи он указан вworking_weekends, то этобудний день, иначе добавляем 1 день кначальному днюи переходим к шагу 2. - Если это
будний деньи он указан вnonworking_weekdays(приоритет выше чем уworking_weekends), то добавляем 1 день кначальному днюи переходим к шагу 2, иначе мы нашли дату.
- Склонируйте репозиторий:
git clone https://github.com/aensidhe/telegram-muter.git
cd telegram-muter- Установите зависимости:
pip install -r requirements.txt- Создайте файл конфигурации:
cp config.template.toml config.toml- Настройте
config.toml:
[auth]
api_id = 12345 # Ваш API ID от https://my.telegram.org
api_hash = "your_api_hash" # Ваш API Hash
phone_number = "+1234567890" # Ваш номер телефона
# Определение расписаний - минимум требуется расписание "default"
[[schedules]]
name = "default" # Обязательное расписание "default"
start_of_day = "10:00:00" # Время начала рабочего дня
end_of_day = "19:00:00" # Время окончания рабочего дня - скрипт не будет заглушать в рабочие часы
timezone = "auto" # "auto" для системной зоны или "Europe/Moscow"
weekends = ["Sat", "Sun"] # Выходные дни
# Рабочие выходные (конкретные даты или интервалы)
working_weekends = [
"2025-11-01", # Одиночная дата
["2025-12-25", "2025-12-31"] # Интервал дат
]
# Нерабочие будни (конкретные даты или интервалы)
nonworking_weekdays = [
"2025-12-31", # Новый год
["2026-01-01", "2026-01-07"] # Новогодние каникулы
]
# Дополнительные расписания с наследованием
[[schedules]]
name = "work"
parent = "default" # Наследуется от "default"
start_of_day = "09:00:00" # Переопределение: рабочий день начинается раньше
timezone = "UTC" # Переопределение: использовать UTC
[[schedules]]
name = "duty"
parent = "work" # Наследуется от "work"
weekends = [] # Переопределение: дежурство 24/7, выходных нет
working_weekends = [] # Очистка родительских настроек
# Настройки групп (привязка групп к расписаниям)
[[group_settings]]
name = "Рабочий чат"
schedule = "work" # Точное совпадение имени группы
[[group_settings]]
name_pattern = "duty.*" # Регулярное выражение для групп начинающихся с "duty"
schedule = "duty" # Использовать расписание "duty"
[[group_settings]]
name_pattern = "weekend.*"
schedule = "default" # Группы выходного дня используют расписание по умолчаниюpython telegram_muter.py
# или явно
python telegram_muter.py mutepython telegram_muter.py mute --finish-the-daypython telegram_muter.py unmutepython telegram_muter.py --helpПри первом запуске вам потребуется:
- Ввести код подтверждения из SMS
- При необходимости ввести пароль двухфакторной аутентификации
Примечание: Команда unmute найдет и включит уведомления только для тех чатов, которые были заглушены до начала следующего рабочего дня этой программой. Чаты, заглушенные на другое время, останутся заглушенными.
- Время: Формат HH:MM:SS (например, "10:00:00")
- Даты: Только формат ISO8601 YYYY-MM-DD (например, "2025-12-31")
- Дни недели:
- Английские: Mon, Tue, Wed, Thu, Fri, Sat, Sun
- Русские: Пн, Вт, Ср, Чт, Пт, Сб, Вс
- Интервалы дат: Массив из двух дат
["2025-12-25", "2025-12-31"](включая обе границы)
Запуск тестов:
# Запуск всех тестов
pytest
# Запуск конкретных тестов
pytest test_working_days.py -v
pytest test_integration.py -vtelegram_muter.py— основной файл приложенияconfig_tester.py— утилита для тестирования конфигурацииconfig.template.toml— шаблон конфигурацииtest_working_days.py— тесты алгоритма рабочих днейtest_integration.py— интеграционные тестыrequirements.txt— зависимости Python
- Python 3.8+
- Telegram API credentials (получите на https://my.telegram.org)
- Активная учетная запись Telegram
MIT — см. файл LICENSE
Если у вас возникли проблемы или вопросы, создайте issue в репозитории GitHub.