Wahrscheinlich ist der beste Ort, um nachzusehen, das Automatisierungsskript, das dem Data Explorer-Plugin hinzugefügt wird: discourse-data-explorer/plugin.rb at main · discourse/discourse-data-explorer · GitHub. Es lohnt sich auch, die vorhandenen Skripte und Trigger des Automation-Plugins zu betrachten: https://github.com/discourse/discourse-automation/tree/main/lib/discourse_automation
Da es auf Meta nicht viele Informationen über das Hinzufügen benutzerdefinierter Automatisierungen gibt, hier ist eine Beispiel-plugin.rb-Datei, die ein Skript zum Aktualisieren der E-Mail-Einstellung für die Aktivitätszusammenfassung eines Benutzers hinzufügt. Das Skript kann durch die Trigger ‘user_added_to_group’ oder ‘user_removed_from_group’ des Automation-Plugins ausgelöst werden.
# frozen_string_literal: true
# name: automation-script-example
# about: Ein Beispiel, wie man ein Skript zu einer Automatisierung hinzufügt
# 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
Der vollständige Plugin-Code ist hier: GitHub - scossar/automation-script-example: An example of how to add a custom script to the Discourse Automation plugin..
Bitte verwenden Sie diesen Code nicht unverändert auf einer Produktionsseite. Ich habe mir den Automatisierungscode erst heute Abend angesehen. Wenn ich Feedback zu möglichen Problemen mit dem Code erhalte, werde ich diesen Beitrag und das GitHub-Repository aktualisieren.
Bearbeitung: Meine Sorge war, wie man am besten mit dem Fall umgeht, dass mehrere Automatisierungsskripte durch die Trigger ‘user_added_to_group’ oder ‘user_removed_from_group’ ausgelöst werden. Die ursprüngliche Version des Plugins prüfte auf:
fields.has_key?("email_digests")
aber das erschien etwas unzuverlässig. Was wäre, wenn ein anderes Skript hinzugefügt würde, das ebenfalls einen email_digests-Schlüssel hätte?
Der aktualisierte Code übergibt den Parameter automation an den Codeblock und prüft:
automation.script == "user_update_summary_email_options"
Das sollte sicherstellen, dass das Skript nicht für die falsche Automatisierung ausgeführt wird.
… wenn ich noch einmal darüber nachdenke, ist es unwahrscheinlich, dass das Skript durch eine Automatisierung ausgelöst werden könnte, für die es nicht konfiguriert wurde ![]()