لقد تذكرت هذا المنشور من فترة. في حال استفاد أي شخص آخر من هذا في المستقبل، كان هذا هو الحل الذي توصلت إليه لهذه المشكلة في النهاية!
إزالة منشورات الإجراءات الصغيرة غير المرغوب فيها
السكريبت الخاص بـ Rails أدناه مطلوب للقيام بذلك - لقد قمت بتسميته smalldelete.rb ووضعته في /var/www/discourse/script أثناء التواجد داخل الحاوية.
نحتاج أيضًا إلى المرور والتأكد من وضع كلمة delete في قسم المنشور الفعلي لكل منشور إجراء صغير نريد تدميره، للتمييز بين ما قد نرغب في الاحتفاظ به. إليك مثال لما أعنيه مع منشور التحديث التلقائي (Auto Bump):
يمكنك تغيير كلمة المفتاح هذه إلى شيء آخر إذا لزم الأمر عن طريق تعديل السطر p.raw.strip.downcase == \"delete\" إلى كلمة مفتاح أخرى.
سكريبت لـ smalldelete.rb
class TopicCleaner
def self.delete_small_actions(topic_id, dry_run: false)
topic = Topic.find_by(id: topic_id)
unless topic
puts "Topic #{topic_id} not found"
return
end
posts = topic.posts.where(post_type: Post.types[:small_action])
to_delete = posts.select { |p| p.raw.strip.downcase == "delete" }
if to_delete.empty?
puts "No small action posts with 'delete' found in topic #{topic_id}"
return
end
puts "Found #{to_delete.size} matching posts in topic ##{topic_id}"
to_delete.each do |post|
if dry_run
puts "Would PERMANENTLY delete post ##{post.id} (created #{post.created_at}, by #{post.user.username})"
else
post.destroy()
puts "🗑️ Permanently deleted post ##{post.id}"
end
end
puts dry_run ? "Dry run complete — no posts deleted." : "Finished permanent cleanup of topic #{topic_id}"
end
end
يجد السكريبت موضوعًا حسب المعرّف (ID)، ثم يتحقق من كل منشور في هذا الموضوع لمعرفة ما إذا كان يحتوي على الكلمة المفتاحية المحددة، ولا شيء آخر. إذا كان هذا صحيحًا، فإنه يقوم بتهيئة هذا المنشور المحدد للحذف.
بمجرد إعداد السكريبت، يمكننا الدخول إلى وحدة تحكم rails وتحميله:
load Rails.root.join("script/smalldelete.rb")
ثم، أخيرًا، يمكننا تشغيل
TopicCleaner.delete_small_actions(topic_id, dry_run: false)
تم تضمين علامة dry_run أيضًا لسرد ما سيتم حذفه نهائيًا بالضبط، إذا رغبت في ذلك.
الآن بالطبع، هذه التغييرات جمالية بحتة ولا تحدث فرقًا من حيث المحتوى، حيث أن المنشورات المحذوفة مؤقتًا لن تظهر لغير الموظفين على أي حال.
أنا معجب بشكل خاص بجعل كل شيء يبدو جميلاً ومرتبًا، لذلك يمكنني بالتأكيد رؤية بعض الحالات التي قد يرغب فيها مالكو المنتديات المعينون في الاستفادة من هذا!
