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 ?

