Skip to main content
1

Настройка окружения

Убедитесь, что вы настроили среду для разработки плагинов, как описано в официальной документации Exteragram. Вам понадобится установленный Python 3.8.
2

Создание плагина

Создайте файл с расширением .plugin и следуйте начальным инструкциям.
3

Импорт CactusLib

Дальнейший первый шаг в коде вашего плагина — импортировать необходимые компоненты из CactusLib. CactusLib должен быть установлен в вашем Exteragram.Скопируйте необходимый вам кусок кода ниже и вставьте в плагин.
FirstPlugin.plugin
try:
    # Главный класс-обертка и декораторы
    from cactuslib import CactusUtils, command
except (ImportError, ModuleNotFoundError):
    # Если CactusLib не найден, лучше прервать загрузку плагина.
    raise Exception("Необходим CactusLib. Пожалуйста, установите его из @CactusPlugins.")
4

Создание класса плагина

Ваш основной класс плагина обязательно должен наследоваться от CactusUtils.Plugin (или его псевдонимов CactusUtils.CactusModule, CactusUtils.CactusPlugin). Это дает вашему плагину доступ ко всем утилитам.
FirstPlugin.plugin
__name__ = "Мой Первый Плагин"
__description__ = "Плагин, который приветствует мир."
__id__ = "my_first_plugin"
__version__ = "1.0"
__author__ = "@MyUsername"

# ... импорты ...

class MyFirstPlugin(CactusUtils.Plugin):
    # Здесь будет логика вашего плагина
    pass
5

"Hello, world!"

Давайте создадим простую команду, которая будет отправлять “Hello, World!” в ответ. Для этого мы используем декоратор @command.
FirstPlugin.plugin
# ... метаданные и импорты ...

class MyFirstPlugin(CactusUtils.Plugin):
    def on_plugin_load(self):
        # Обязательно вызывайте родительский метод! Это критически важно.
        super().on_plugin_load()
        
        # Этот метод вызывается при загрузке плагина
        self.info("Мой первый плагин успешно загружен!")
    
    def on_plugin_unload(self):
        # Обязательно вызывайте родительский метод! Это критически важно.
        super().on_plugin_unload()

        # Этот метод вызывается при выгрузке плагина
        self.info("Мой первый плагин успешно выгружен!")

    @command(doc="Отправляет приветствие")
    def hello(self, cmd: CactusUtils.Command):
        # cmd - это объект с информацией о вызванной команде
        # cmd.answer() - это удобный метод для ответа в тот же чат
        cmd.answer("Hello, World from MyFirstPlugin!")

        return HookResult(strategy=HookStrategy.CANCEL)

Разбор кода:

  • on_plugin_load(): Специальный метод, который вызывается один раз при загрузке плагина. Идеальное место для инициализации различных данных.
  • on_plugin_unload(): Аналогично on_plugin_load(), но вызывается при выгрузке плагина.
  • self.info("..."): Метод для вывода сообщения в logcat с префиксом [my_first_plugin] [INFO].
  • @command(...): Декоратор, который превращает обычный метод Python в команду, доступную пользователю.
    • doc="...": Описание команды, которое будет видно в меню .chelp.
  • hello(self, cmd: CactusUtils.Command):
    • cmd: Объект CactusUtils.Command, содержащий всю информацию о вызове: аргументы, исходное сообщение, ID чата и т.д.
  • cmd.answer("..."): Встроенный метод для отправки ответного сообщения. Он автоматически определяет, куда нужно отправить ответ.
Теперь, если вы установите этот плагин и напишете в любом чате .hello, в чат отправится сообщение Hello, World from MyFirstPlugin!.