Скрипт для отправки приветственного сообщения в фоновом режиме

ask.discourse.org — хорошая отправная точка. Вот пример скрипта на Rails:

MAX_MESSAGES = 1000 # Опциональный лимит для тестирования
SECONDS_BETWEEN_MESSAGES = 3 # Интервал в 3 секунды

Rails.logger.info "Запуск скрипта массовой рассылки сообщений..."

# Определите содержимое вашего сообщения
message_title = "Добро пожаловать в наше сообщество"
message_body = "Привет! Мы очень рады видеть вас здесь. Дайте нам знать, если у вас возникнут вопросы!"

# Получите пользователей, отсортированных по последнему времени активности
users = User.where(active: true)
            .where.not(staged: true) # Исключить пользователей в режиме тестирования
            .order(last_seen_at: :desc)
            .limit(MAX_MESSAGES)

Rails.logger.info "Найдено активных пользователей для рассылки: #{users.count}."

users.each_with_index do |user, index|
  begin
    Rails.logger.info "Добавление сообщения в очередь для #{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 "Сообщение успешно добавлено в очередь для #{user.username}."

    # Подождите указанный интервал перед обработкой следующего пользователя
    sleep(SECONDS_BETWEEN_MESSAGES)
  rescue => e
    Rails.logger.error "Не удалось отправить сообщение пользователю #{user.username}: #{e.message}"
  end
end

Rails.logger.info "Скрипт массовой рассылки завершен!"

Я не вносил никаких изменений, и пользователь system отправил личные сообщения всем пользователям в моем тестовом экземпляре:


Сколько у вас пользователей?