imported>Catweird |
imported>Megejot408 |
Строка 1: |
Строка 1: |
| CatABMS (Catware Advanced Bot Manipulating System, Расширенная Система Управления Ботами Catware) - разработанный Catware, и до сих пор не вышедший в свет (почти) синхронный фреймворк для создания ботов для социальной сети ВКонтакте. Имеет несколько ответвлений.
| | <div style="background:black;width:100%;text-align:center"> |
| | | <h1 style="font-size:150px"><span style="color:#359cfc">#нет</span><span style="color:yellow">войне</span></h1> |
| == Структура системы == | | <span style="font-size:40px;color:white">Фонд Catware против войны на Украине</span> |
| Система выполнена в стандарте CFHS - Catware File Hierarhy System, аналог для FHS:
| | </div> |
| | |
| chains - файлы CatABMS Chains
| |
| | |
| chats - БД чатов
| |
| | |
| commands - исполняемые файлы и конфиги команд
| |
| | |
| configs - конфигурационные файлы CatABMS
| |
| | |
| corerc - Файлы CoreRC (Core Running Commands), выполняющиеся при получении сообщения.
| |
| | |
| exf - исполняемые файлы CatShell
| |
| | |
| json - модифицируемые системой конфигурационные файлы
| |
| | |
| lib - библиотеки, необходимые для работы ядра или иных компонентов системы
| |
| | |
| modules - конфигурационные файлы системы модулей
| |
| | |
| services - исполняемые файлы Catware Autostart, выполняющиеся при старте бота
| |
| | |
| tmp - временные файлы, которые удаляются CoreRC-модулем CSM (Catware Space Manager).
| |
| | |
| users - БД пользователей
| |
| | |
| catenv.py - файл с взаимосвязанными DEFами, необходимыми для работы системы - фактически API системы.
| |
| | |
| core.py - ядро, обрабатывающее входящие сообщения
| |
| | |
| faststart.py - загрузчик системы
| |
| | |
| == Структура: Загрузчик ==
| |
| Идёт начальная загрузка модулей: sys, os, psutil.
| |
| | |
| Далее идёт загрузка CatENV. Файл загружается в память, выполняется и удаляется.
| |
| | |
| Активируется система автономности: установщик модулей, который за вас установит и импортирует все модули, следуюя логике сетов модулей. Сет модулей состоит из:
| |
| | |
| # Списка модулей, которые необходимо установить через PIP | |
| # Строк, которые необходимо выполнить через exec, наподобии import ... | |
| # Скрипт иницилизации модулей, которые требуют обозначения их обьекта
| |
| | |
| Если какой-то из модулей импортировать не удалось, то идёт переустановка всего сета модулей.
| |
| | |
| Всего их 3:
| |
| | |
| # base-system (Базовые пакеты, которые даже устанавливать не надо)
| |
| # media (В основном, это модули, работающие с API/парсеры некоторых сервисов)
| |
| # network (В основном, это те, что коим-то боком работают с сетевым стеком.)
| |
| | |
| Затем идёт загрузка конфигурационных файлов, в которых содержится полустатическая информация - токен, ID группы, название бота и другая косметическая/не очень информация.
| |
| | |
| Выполняются функции CatENV - getreportban, getban, getmuted, gettroll.
| |
| | |
| Определяется операционная система, исходя из значения os.name.
| |
| | |
| Далее идёт подготовка к запуску ядра.
| |
| | |
| Система авторизуется во ВКонтакте, бесконечно дёргая при этом метод авторизации, пока не получится залогиниться во ВКонтакте.
| |
| | |
| Когда залогиниться наконец получается, то управление косвенно передаётся ядру: при нажатии Ctrl+C ядро выгружается из памяти и активируется CatShell - оболочка командой строки, работающая с EXF-файлами (CatShell EXecutable Files)
| |
| | |
| По команде exit, ядро вновь начинает свою загрузку.
| |
| | |
| Когда управление передаётся ядру:
| |
| | |
| == Структура: Ядро == | |
| Когда управление передано ядру, оно занимается загрузкой библиотек:
| |
| | |
| # detectfull, чтобы при обработке картинок качество не шакалилось
| |
| # surrogate-manager, ныне не рабочая библиотека
| |
| # CUMv2 - Catware User Manager второй версии. Работает с БД пользователей и чатов.
| |
| # generrorcode - генератор индивидуальных кодов ошибок
| |
| | |
| Далее, идёт загрузка команд из папки, обозначенной в папке ядра, в которой содержатся папки, содержащие .py и .json-файлы, первый является исполняемым исходником, а второй выполняет функцию конфига, который можно подсмотреть в [[Создание команд|этой статье]].
| |
| | |
| Затем загружаются CoreRC файлы, и выполняется Catware Autostart
| |
| | |
| Далее начинается бесконечный цикл ядра, поскольку ядро сделано очень криво и крашится каждые 5 минут.
| |
| | |
| Начинается оно с очистки лишних переменных компонентом Catware MemGun.
| |
| | |
| Если установлен необходимый параметр, то ядро запускается в безопасном режиме: отвечает только администраторам бота.
| |
| | |
| Сообщается всем администраторам о запуске бота: сообщается IP сервера, операционная система и хостнейм.
| |
| | |
| Ядро начинает слушать LongPoll-сервера ВКонтакте на события.
| |
| | |
| Если получен обьект нового/отредактированного сообщения, полученного НЕ ОТ ГРУППБОТА, то начинается разбор текста сообщения. Если же оно пустое/некорректное, то на событие ставится метка о невыполнении, дабы освободить ядро от лишних нагрузок.
| |
| | |
| Если же обьект события полностью корректен, то получается следующая информация:
| |
| | |
| - ID пользователя
| |
| | |
| - Время получения обьекта события
| |
| | |
| - Обьект получателя
| |
| | |
| - Переданная команда
| |
| | |
| - Переданные параметры
| |
| | |
| - Переданные флаги
| |
| | |
| - ID чата, если получено в беседе | |
| | |
| Также проверяется, находится ли пользователь в тролльлисте, если есть, то он начинает троллиться текстом, который ему указал администратор, если нет, то обработка продолжается:
| |
| | |
| # Начинается проверка на наличие переданной команды в списке команд
| |
| # Запускаются модули CoreRC
| |
| # Проверка на реплаи: если обнаружен реплай и не передан параметр, то текст из реплайнутого сообщения будет использоваться как параметр
| |
| # Проверка вложений в сообщении
| |
| # Проверка на значение выполняемого идентификатора цепочки
| |
| # Если всё соответствует ПЕРВОМУ случаю, то выполняется команда
| |
| # Если обнаружен ВТОРОЙ случай (команда из списка потенциально оскорбительных команд), проверяется согласие пользователя на то, чтобы выполнить эту команду, если же пакет подключен - она выполняется.
| |
| # Если обнаружен ТРЕТИЙ случай (команда для тестеров), проверяется наличие метки тестера у пользователя, если она имеется - команда запускается, если нет - пользователь получает соответствующее уведомление и приглашается в программу бета-тестирования
| |
| # Если же команда при выполнении крашнулась, то багрепорт отправляется админам в нём сообщается вызванная команда, полный Traceback, ID диалога, идентификатор команды, время вызова команды, код ошибки, а пользователю остаётся видеть сообщение об ошибке.
| |
| # Если обнаружена ошибка, связанная с правами администрирования в том или ином чате, но у бота нет админки в беседе, отправляется соответствующее сообщение
| |
| # Если обнаружен ЧЕТВЁРТЫЙ СЛУЧАЙ, то задействуется модуль цепочки, указанный у юзера в параметре stage.
| |
| # Если обнаружен ПЯТЫЙ случай (выход из цепочки), параметр stage попросту обнуляется.
| |
| # Если же пользователь обнаружен в забаненых, то ничего не выполняется, а пользователь посылается нахуй.
| |
| | |
| Далее идёт проверка других типов событий:
| |
| | |
| # GROUP_LEAVE = отписавшемуся пользователю пишется в Л/С требование обьяснить своё действие, в целях улучшения бота.
| |
| # GROUP_JOIN = благодарность за подписку в Л/С.
| |
| # MESSAGE_REPLY = логирование и подсчёт отправленных сообщений
| |
| # WALL_POST_NEW = в беседу группы отправляется новая запись на стене бота.
| |
| # Также идёт проверка нагрузки на оперативную память, если занято больше 90% - сообщается об этом админам.
| |
| # Очистка памяти инструментом MemGun (Memory Gun)
| |
| | |
| -- Продолжение следует --
| |