Créer des automatisations personnalisées

Le meilleur endroit pour commencer à chercher est probablement le script d’automatisation ajouté au plugin Data Explorer : discourse-data-explorer/plugin.rb at main · discourse/discourse-data-explorer · GitHub. Il est également intéressant de consulter les scripts et déclencheurs existants du plugin Automation : https://github.com/discourse/discourse-automation/tree/main/lib/discourse_automation

Comme il n’y a pas beaucoup d’informations sur Meta concernant l’ajout d’automatisations personnalisées, voici un exemple de fichier plugin.rb qui ajoute un script pour mettre à jour la préférence de l’utilisateur concernant l’e-mail de résumé d’activité. Le script peut être déclenché par les déclencheurs « user_added_to_group » ou « user_removed_from_group » du plugin Automation.

# frozen_string_literal: true

# name: automation-script-example
# about: An example of how to add a script to an automation
# version: 0.0.1
# authors: scossar

enabled_site_setting :automation_script_example_enabled

after_initialize do
  reloadable_patch do
    if defined?(DiscourseAutomation)
      DiscourseAutomation::Scriptable::USER_UPDATE_SUMMARY_EMAIL_OPTIONS =
        "user_update_summary_email_options"
      add_automation_scriptable(
        DiscourseAutomation::Scriptable::USER_UPDATE_SUMMARY_EMAIL_OPTIONS
      ) do

        field :email_digests, component: :boolean

        version 1
        triggerables [:user_added_to_group, :user_removed_from_group]

        script do |context, fields, automation|
          if automation.script == "user_update_summary_email_options" && (context["kind"] == "user_added_to_group" || context["kind"] == "user_removed_from_group")
            user_id = context["user"].id
            digest_option = fields.dig("email_digests", "value")
            user_option = UserOption.find_by(user_id: user_id)

            if (user_option)
              user_option.update(email_digests: digest_option)
            end
          end
        end
      end
    end
  end
end

Le code complet du plugin se trouve ici : GitHub - scossar/automation-script-example: An example of how to add a custom script to the Discourse Automation plugin..

:warning: veuillez ne pas utiliser ce code tel quel sur un site de production. Je n’avais pas examiné le code d’automatisation avant ce soir. Si je reçois des commentaires sur des problèmes potentiels avec le code, je mettrai à jour ce post et le dépôt GitHub.

Edit : ma préoccupation concernait la meilleure façon de gérer le cas où plusieurs scripts d’automatisation sont déclenchés par les déclencheurs « user_added_to_group » ou « user_removed_from_group ». La version initiale du plugin vérifiait :

fields.has_key?("email_digests")

mais cela semblait un peu fragile. Et si un autre script était ajouté qui avait également une clé email_digests ?

Le code mis à jour transmet le paramètre automation au bloc de code et vérifie :

automation.script == "user_update_summary_email_options"

Cela devrait garantir que le script ne s’exécute pas pour la mauvaise automatisation.
… en y réfléchissant encore, il est peu probable que le script soit déclenché par une automatisation pour laquelle il n’a pas été configuré :slight_smile:

7 « J'aime »