ربما يكون أفضل مكان للبدء في البحث هو في البرنامج النصي للأتمتة الذي تمت إضافته إلى المكون الإضافي لاستكشاف البيانات: discourse-data-explorer/plugin.rb at main · discourse/discourse-data-explorer · GitHub. يجدر أيضًا إلقاء نظرة على البرامج النصية والمشغلات الحالية للمكون الإضافي للأتمتة: https://github.com/discourse/discourse-automation/tree/main/lib/discourse_automation
نظرًا لعدم وجود الكثير من المعلومات حول Meta حول إضافة أتمتة مخصصة، إليك مثال لملف plugin.rb يضيف برنامجًا نصيًا لتحديث تفضيل البريد الإلكتروني لملخص نشاط المستخدم. يمكن تشغيل البرنامج النصي بواسطة مشغلات المكون الإضافي للأتمتة ‘user_added_to_group’ أو ‘user_removed_from_group’.
# 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
الكود الكامل للمكون الإضافي هنا: GitHub - scossar/automation-script-example: An example of how to add a custom script to the Discourse Automation plugin..
يرجى عدم استخدام هذا الكود كما هو في موقع إنتاجي. لم ألقِ نظرة على كود الأتمتة قبل هذا المساء. إذا تلقيت أي ملاحظات حول المشكلات المحتملة في الكود، فسوف أقوم بتحديث هذا المنشور ومستودع GitHub.
تعديل: كان قلقي هو كيفية التعامل على أفضل وجه مع حالة تشغيل العديد من نصوص الأتمتة بواسطة مشغلات ‘user_added_to_group’ أو ‘user_removed_from_group’. كان الإصدار الأولي للمكون الإضافي يتحقق من:
fields.has_key?("email_digests")
لكن هذا بدا غير موثوق. ماذا لو تمت إضافة نص برمجي آخر يحتوي أيضًا على مفتاح email_digests؟
يقوم الكود المحدث بتمرير المعلمة automation إلى كتلة الكود ويتحقق من:
automation.script == "user_update_summary_email_options"
يجب أن يضمن ذلك عدم تشغيل البرنامج النصي لأتمتة خاطئة.
… بالتفكير في الأمر أكثر، من غير المرجح أن يتم تشغيل البرنامج النصي بواسطة أتمتة لم يتم تكوينه لها ![]()