Telegram бот для отправки голосовых сообщений, создания стикеров-цитат и запрета репостов из заблокированных чатов.
Python 3.10+
python-telegram-bot[job-queue] == 20.2
Pillow == 9.4.0
- опционально
pilmoji == 2.0.2
- опционально
emoji == 1.7.0
- зависимость pilmoji
- Установите Python 3.10+
- Установите зависимости:
pip install -r requirements.txt
- В файл
data/import/token.txt
запишите свой токен бота. - Запустите
start_admin_tool.py
и импортируйте токен. - Запустить бота можно с помощью
start_bot.py
или командойpython -m snearl
.
(В формате для /setcommands BotFather)
help - Помощь с ботом
info - Информация о чате
block - Внести канал в чёрный список
allow - Разблокировать канал
blacklist - Посмотреть чёрный список
v - Добавить войс
voice_delete - Удалить войс
voicelist - Посмотреть список войсов
q - Добавить цитату
quote_delete - Удалить цитату
quote_random - Шанс рандомной цитаты
quotelist - Посмотреть список цитат
SnearlBot умеет:
Удалять репосты из заблокированных чатов
- Заблокировать чат:
/block
; - Разблокировать чат:
/allow <НомерЧата>
; - Список блокировок:
/blacklist
;
Хранить и отправлять инлайн списки голосовых сообщений
-
Добавить войс:
/v [a=НомерАвтора] <Описание>
;<Описание>
обязательно для войсов;- Необязательным параметром
a
можно присвоить войс другому автору, помимо отправителя,НомерАвтора
можно узнать в списке войсов перед именем автора на кнопке;
-
Открыть инлайн список войсов:
@SnearlBot в [ТекстЗапроса]
;- Запросом может быть имя автора или строка из описания;
в
после имени бота тоже опционально;
-
Удалить войс:
/voice_delete <НомерАвтора> <НомерВойса>
;
-
Список войсов:
/voicelist
;
Хранить и отправлять стикеры-цитаты инлайн
- Добавить цитату:
- Ответить на сообщение командой
/q
; - Переслать несколько сообщений, одновременно введя в поле сообщения
/q
; - Опционально можно указать своё описание:
/q [Описание]
;
- Ответить на сообщение командой
- Открыть инлайн список цитат:
@SnearlBot ц [ТекстЗапроса]
;- Запросом может быть имя автора или строка из описания;
ц
после имени бота опционально, но все цитаты в конце списка после войсов;
- Удалить цитату:
/quote_delete <НомерАвтора> <НомерЦитаты>
;
- Список цитат:
/quotelist
; - Частота случайных цитат:
/quote_random
;- Регулирует то, как часто бот будет отвечать случайными цитатами на сообщения в чате;
Модуль start_admin_tool.py
содержит некоторые команды недоступные через бота.
Модуль содержит функции импорта/экспорта/удаления данных из базы данных, а также функцию миграции и локального режима.
Инструкции для каждой функции можно прочитать при её запуске.
Для прочих своих запросов редактируйте data/database.db
через СУБД Sqlite.
Импорт производится из директории data/import
.
Экспорт производится в директорию data/export
.
Структуры этих двух папок одинаковы:
token.txt
- содержит токен бота.
blacklist.csv
- список заблокированных чатов и пользователей.
voicelist/
- иерархия аудио-файлов. Используется в импорте если у вас уже имеются сторонние файлы .ogg.
quotelist/
- иерархия стикеров. Используется в импорте если у вас уже имеются сторонние файлы .webp.
- Войсы и цитаты хранятся привязанными к каждому отдельному чату. Администратор может сменить эту привязку на другой чат вручную.
- При смене типа чата на супергруппу привязка в базе данных меняется автоматически.
- Все данные чата удаляются если бот выходит из него.
В этом режиме бот разрешает использовать команды изменяющие базу данных только администраторам и владельцам одного избранного чата. С выключенным режимом в любом другом чате пользователи смогут создать собственный набор войсов и список блокировок.
Файлы модуля хранятся в snearl/module/
. Там же можно посмотреть на примере как модули реализованы.
Помимо этого нужно:
- Импортировать новый модуль в
snearl/instance.py
вstart_bot()
; - Если модуль использует БД, то добавить нужные вызовы функций в
module/dataupdate.py
вchat_migrate()
иbot_status_changed()
; - Если модуль использует инлайн, то добавить по аналогии в
module/inline_handler.py
;
Администраторские функции обычно выносятся в отдельный файл и:
- Импортируются в файле
start_admin_tool.py
; - В массив
commands
добавляются доступные пользователю команды; - В
clear_table()
добавляется возможность удалить все записи из таблицы БД модуля;