Создание собственной автоматизации

Можно ли создавать собственные скрипты без каких-либо проблем? Достаточно ли просто поместить их в папку, чтобы при обновлениях плагина ничего не происходило? Или мне нужно создать плагин, который будет взаимодействовать с этим плагином? Например, мне нужен скрипт для создания темы. Есть скрипт создания поста, но мне нужно создавать темы автоматически. Спасибо!

Да, для определения пользовательского скрипта требуется плагин.

Что-то вроде этого в plugin.rb:

after_initialize do
  if defined?(DiscourseAutomation)
    add_automation_scriptable("my_custom_script") do
      # ...
    end
  end
end

Я попробовал, но получил сообщение:

Не удалось найти скрипт lb-script для автоматизации testing, убедитесь, что установлен соответствующий плагин

Возможно, я ошибаюсь, но должен ли я создать отдельный файл, или можно всё разместить в файле plugin.rb?

Покажите мне код, иначе мне будет трудно помочь вам :slight_smile:

Я только что попробовал с пост-скриптом, скопированным из папки скриптов плагина Automation:

after_initialize do
    if defined?(DiscourseAutomation)
        add_automation_scriptable("lb-script") do
            version 1

            placeholder :creator_username
          
            field :creator, component: :user
            field :topic, component: :text, required: true
            field :post, component: :post, required: true
          
            triggerables %i[recurring point_in_time]
          
            script do |context, fields, automation|
              creator_username = fields.dig("creator", "value") || Discourse.system_user.username
          
              placeholders = { creator_username: creator_username }.merge(context["placeholders"] || {})
          
              creator = User.find_by!(username: creator_username)
          
              PostCreator.new(
                creator,
                topic_id: fields.dig("topic", "value"),
                raw: fields.dig("post", "value"),
              ).create!
            end
        end
    end
end

Мне не хватает контекста о том, что вы здесь делаете. Вот полный пример во внешнем плагине: discourse-assign/plugin.rb at main · discourse/discourse-assign · GitHub

Я не понимаю, в чём разница по сравнению с тем, что я сделал. Очевидно, я использовал скрипт в разделе Post только для проверки работоспособности. Но когда я пытаюсь создать автоматизацию, система не находит ни одного триггера и сообщает, что не может найти скрипт. Однако код должен позволять выбирать между двумя триггерами для создания поста, верно? Я, наверное, ошибаюсь, но я действительно не понимаю.

Вы уверены, что ваш новый плагин включен?

Да, конечно. Это полностью включено.

Попробуйте использовать assign локально и посмотрите, удастся ли вам отобразить элемент в списке. Если нет, значит, дело в чём-то другом.

Могу подтвердить, что Random Assign работает даже в том случае, если плагин Assign не включен. Вероятно, я что-то упускаю и не хочу тратить ваше время.

Я понял, в чём была проблема.

Я заменил lb-script на lb_script, и теперь всё работает. Очевидно, что использовать символ дефиса (-) нельзя.