AutoPostTelegramBot
Проект создан для более удобного управления каналами в Телеграме
Install / Use
/learn @InsanusMokrassar/AutoPostTelegramBotREADME
БОТ ЗААРХИВИРОВАН И НЕ ЯВЛЯЕТСЯ ДЕЕСПОСОБНЫМ ВВИДУ ОБНОВЛЕНИЙ TELEGRAM BOT API. ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ PlaguPoster КОТОРЫЙ ИМЕЕТ ТОТ ЖЕ И ДАЖЕ БОЛЕЕ ШИРОКИЙ ФУНКЦИОНАЛ
Auto Post Telegram Bot
Как начать использовать?
Если необходимо самостоятельно собрать проект, можно воспользоваться простой инструкцией:
- Скачать проект с Github
- Сделать
./gradlewисполняемым (chmod 455 ./gradlewдля*nix) - Выполнить
./gradlew build
В зависимости от дистрибутива и целей, инструкция запуска будет несколько отличаться:
- В случае самостоятельной сборки (а также в случае скачивания архива с jenkins страницы)
- Разархивировать в директорию, где будет находиться бот
- Найти исполнительный файл в папке
$WORK_DIRECTORY/AutoPostTelegramBot-$version/bin/(дляWindowsфайл имеет расширение.bat) - Запустите из консоли соответствующий файл, передав первым аргументом путь до JSON конфига
- В случае использования проекта как библиотеки желательно указать как главный класс
com.github.insanusmokrassar.AutoPostTelegramBot.LaunchKt - В случае запуска в Intellij Idea рекомендуется
- Использовать шаблон
Jar Application - Как аргумент устанавливать путь до JSON конфига
- Путь до
Jarбудет выглядеть как$PROJECT_DIR/build/libs/$FILENAME.jar - Перед сборкой как запускать задачу gradle
./gradlew clean build
- Использовать шаблон
- Profit
Возможности
Что бот может?
Если кратко, назначением бота является автоматизация и нормализация создания и
публикации постов в каком-либо чате/канале. Под постом в данном случае понимается
совокупность сообщений, которые должны быть опубликованы одновременно. Публикация
происходит из чата/канала, выбранного как sourceChat путем выставления
соответствующего sourceChatId.
A little bit deep или капелька взгляда изнутри
Данный раздел не требуется к прочтению для тех, кто не собирается использовать проект как библиотеку и писать для него плагины.
База
Данный бот в основе своей имеет абсолютный минимум для запуска:
- Пост - совокупность сообщений и сообщения-уведомлений о регистрации
- Базовая БД хранится в двух публичных классах, имеющих
coroutine-каналы для подписки - Класс запуска имеет
coroutine-каналы для подписки на сообщения, приходящие к боту - Система плагинов
Если посмотреть на пакет с базовым кодом, вы увидите только базу данных, модельки настроек и плагин-корень. Весь прочий функционал достигается плагинами, описанными после этого раздела.
Плагины
Любой плагин наследуется от класса Plugin
На данный момент большая часть базовых плагинов включена в пакет распространения, но в планах их вынести в отдельные проекты. Кроме того, вы можете не включать в конфигурацию ни один из плагинов.
Остальное
В остальном плагины вольны делать что им вздумается с той лишь оговоркой, что они не способны изменить настройки других плагинов. По этой причине стоит крайне осторожно подходить к выбору и подключению сторонних плагинов к боту.
Формат времени
После длительного тестирования и проверок было решено добавить стандартизированную работу с временем, которая позволила бы разработчикам плагинов не писать лишний и повторяющийся код, а пользователям (администраторам каналов и групп) - не забивать голову лишними форматами конфигураций. Итак, что из себя представляет простейший формат времени?
- Время:
[часы:]минуты[:секунды[.миллисекунды]]- стоит учесть, что если вы хотите указать только секунды, следует использовать запись00:00:секунды - Дата:
[[год.]месяц.]день- то есть верным будет указание просто числа15, если вы имеете ввиду 15 день месяца. В зависимости от контекста это может быть ближайший 15 день месяца, то есть если сегодня 16 число - ближайшее 15 число будет в следующем месяце. NOTE: НЕ ИСПОЛЬЗУЕТСЯ БЕЗ УКАЗАНИЯ ВРЕМЕНИ (см. Дата и время) - Дата и время:
[дата ]время- то есть в большинстве случаев (если не всегда) выбудете обязаны написать в качестве времени хотя бы00, что будет расценено как полуночь или00минут каждого часа (см. последовательность времени) (стоит понимать, что дата тут необязательный параметр) - Пара даты и времени:
Дата и время-Дата и время- используется для указания пары даты-времени или некоторого промежутка (см. последовательность времени) - Последовательность времени:
Дата и время-Дата и время [step ]Дата и время- тут стоит сказать больше. Когда вы планируете некоторое действие повторять (например, публикация по времени) - гораздо удобней использовать некоторыеhotkeys. Тут мы используем третий параметр дата-время, чтобы указать задержку между датами. Параметрstepне обязателен, но он позволит быть уверенными, что последовательность будет построена корректно и пробел не будет распознан как разделитель даты-времени.
Примеры:
12:30-12:40 01- создаёт последовательность из времени12:3012:3112:32...12:39
10-20 step 5- безstepпромежуток5будет распознан как значение минут. Кроме того, если вы будете использовать этот формат для задания последовательности событий в будущем, поскольку вы не указали часы - считается, что этовольный параметр*. В таком случае при необходимости можно получить следующую последовательность:00:1000:1501:1001:15...
15 12:35- фактически, будет распознаваться какближайшее 15 число, 12 часов 35 минут
Вольный параметр - значение, которое может увеличиться до следующего, если, например, вы
запрашиваете нечто в будущем. Для формата 15 вольным будет час, для 12:15 - день и так далее.
Плагины, включенные в базовый пакет
- BasePlugin
- предоставляет доступ к основному функционалу и в большинстве случаев обязателен к подключению:
Включает следующий функционал:[ "com.github.insanusmokrassar.AutoPostTelegramBot.plugins.base.BasePlugin", {} ]/startPostиспользуется в паре с/fixPost, сообщения между ними будут прикреплены к одному посту. Можно не использовать для галерей (медиагрупп), поскольку такие группы определяются автоматически в один пост. Пример (каждый пункт - отдельное сообщение):/startPost- Тут какой-то текст
- Картиночка
- Еще что-то
/fixPost- Далее вас оповестят, что серия сообщений закреплена за одним постом и будет опубликована.
Записи публикуются не по состоянию на момент создания, а по состоянию на момент перед
публикацией. Кроме того, учтите, что бот не сможет удалять сообщения из постов, если они были
отправлены более двух дней назад (специфика
Telegram) - бот об этом оповестит в канале с логами и скажет, что он не может удалить (приведет еще причину, если вдруг там чего странного).
/deletePost- используйте черезreplyсообщения с текстомPost registered, будет удален пост вместе с его сообщениями. Важно:/startPost//fixPostтаким образом не удаляются - их нужно чистить вручную./renewRegisteredили/renewRegisteredMessage- при реплае одного из сообщений поста удаляет старое сообщение "Post registered" (если оно есть) и отправляет новое
- PostPublisher
- предоставляет возможность публиковать посты без необходимости вручную писать форвард поста. Данный плагин содержит
интерфейс
Publisher, рекомендуемый для имплементации в случае, если вы хотите создать свою реализацию публикатора. Подключение плагина:
Предоставляет:{ "com.github.insanusmokrassar.AutoPostTelegramBot.plugins.publishers.PostPublisher", {} }/publishPost- команда, используемая для немедленной публикации пост(а)(ов). Может использоваться в трех вариантах:/publishPost- публикуется один пост из тех, что выбираются выбиралкой из конфига/publishPost [число]- публикается какое-то число постов, выбранных инстансомChooserиз конфига. Стоит учесть, что при первом совпадении между уже выбранными командой и выданным ей списком изChooserкоманда прекращает выборку и публикует то, что уже выбрано. Само собой, требуется подключение одного изChooserплагинов./publishPostсreplyкакого-то из постов (как для deletePost) - публикует только выбранный пост
- RatingPlugin
- плагин для подключения рейтингов. Позволяет команде голосовать за/против определенные посты и на основании
голосов выбирать посты для публикации. Подключение:
Подключение предоставляет:[ "com.github.insanusmokrassar.AutoPostTelegramBot.plugins.rating.RatingPlugin", {} ]- Возможность командой оценивать посты
- Подключение большого числа плагинов, в том числе

