バックグラウンドでウェルカムメッセージを送信するスクリプト

送信者ユーザー名を含む更新されたスクリプトはこちらです。

MAX_MESSAGES = 1000 # テスト用のオプションの制限
SECONDS_BETWEEN_MESSAGES = 3 # 3秒間隔
SENDER_USERNAME = "coco"

message_sender = User.find_by(username: SENDER_USERNAME)

if message_sender.nil?
  Rails.logger.error "送信者ユーザー '#{message_sender_username}' が見つかりません!"
  exit
end

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!(
      message_sender,
      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 "一括メッセージスクリプトが完了しました!"