Script pour envoyer un message de bienvenue en arrière-plan

ask.discourse.org sortie un bon point de départ, sous forme de script Rails :

MAX_MESSAGES = 1000 # Limite facultative pour les tests
SECONDS_BETWEEN_MESSAGES = 3 # Intervalle de 3 secondes

Rails.logger.info "Démarrage du script de messagerie en masse..."

# Définir le contenu de votre message
message_title = "Bienvenue dans notre communauté"
message_body = "Bonjour ! Nous sommes ravis de vous accueillir ici. N'hésitez pas à nous faire savoir si vous avez des questions !"

# Récupérer les utilisateurs triés par dernière connexion
users = User.where(active: true)
            .where.not(staged: true) # Exclure les utilisateurs staged
            .order(last_seen_at: :desc)
            .limit(MAX_MESSAGES)

Rails.logger.info "Trouvé #{users.count} utilisateurs actifs à qui envoyer un message."

users.each_with_index do |user, index|
  begin
    Rails.logger.info "Mise en file d'attente du message pour #{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 "Message mis en file d'attente avec succès pour #{user.username}."

    # Attendre l'intervalle spécifié avant de traiter l'utilisateur suivant
    sleep(SECONDS_BETWEEN_MESSAGES)
  rescue => e
    Rails.logger.error "Échec de l'envoi du message à #{user.username} : #{e.message}"
  end
end

Rails.logger.info "Script de messagerie en masse terminé !"

Je n’ai fait aucune modification, et l’utilisateur system a envoyé le MP à tous mes utilisateurs sur mon instance de test :


Combien d’utilisateurs avez-vous ?