ask.discourse.org gibt einen guten Ausgangspunkt aus, als Rails-Skript:
MAX_MESSAGES = 1000 # Optionale Grenze für Tests
SECONDS_BETWEEN_MESSAGES = 3 # 3 Sekunden Intervall
Rails.logger.info "Starte Bulk-Nachrichten-Skript..."
# Definiere den Inhalt deiner Nachricht
message_title = "Willkommen in unserer Community"
message_body = "Hallo! Wir freuen uns sehr, dich hier zu haben. Lass uns wissen, wenn du Fragen hast!"
# Rufe Benutzer ab, sortiert nach zuletzt gesehen
users = User.where(active: true)
.where.not(staged: true) # Schließe staged Benutzer aus
.order(last_seen_at: :desc)
.limit(MAX_MESSAGES)
Rails.logger.info "Habe #{users.count} aktive Benutzer gefunden, denen Nachrichten gesendet werden sollen."
users.each_with_index do |user, index|
begin
Rails.logger.info "Warte auf Nachricht für #{user.username} (#{index + 1}/#{users.count})..."
PostCreator.create!(
Discourse.system_user,
title: message_title,
raw: message_body,
archetype: Archetype.private_message,
target_usernames: user.username,
skip_validations: true
)
Rails.logger.info "Nachricht erfolgreich für #{user.username} in die Warteschlange gestellt."
# Warte für das angegebene Intervall, bevor der nächste Benutzer verarbeitet wird
sleep(SECONDS_BETWEEN_MESSAGES)
rescue => e
Rails.logger.error "Fehler beim Senden der Nachricht an #{user.username}: #{e.message}"
end
end
Rails.logger.info "Bulk-Nachrichten-Skript abgeschlossen!"
Ich habe keine Änderungen vorgenommen, und der Benutzer system hat die PM an alle meine Benutzer auf meiner Testinstanz gesendet:
Wie viele Benutzer hast du?

