You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: user_comm_screener.rb
    path of file: ./repos/discourse/lib
    
    the code of the file until where you have to start completion: # frozen_string_literal: true

# There are various ways within Discourse that a user can prevent
# other users communicating with them. The purpose of this class is to
# find which of the target users are ignoring, muting, or preventing
# private messages from the acting user, so we can take alternative
# action (such as raising an error or showing a helpful message) if so.
#
# Users may Mute another user (the actor), which will:
#
#   * Prevent PMs from the actor
#   * Prevent notifications from the actor
#
# Users may Ignore another user (the actor), which will:
#
#   * Do everything that Mute does as well as suppressing content made by
#     the actor (such as posts) from the UI
#
# Users may also either:
#
#  
    
  def actor_communication_preferences
    @actor_communication_preferences ||=
      DB.query(<<~SQL, acting_user_id: acting_user.id, target_user_ids: @target_users.keys)
      SELECT users.id AS target_user_id, 'disallowed_pm' AS preference_type FROM users
      LEFT JOIN allowed_pm_users ON allowed_pm_users.allowed_pm_user_id = users.id
      WHERE users.id IN (:target_user_ids)
      AND (allowed_pm_users.user_id = :acting_user_id OR allowed_pm_users.user_id IS NULL)
      AND allowed_pm_users.allowed_pm_user_id IS NULL
      UNION
      SELECT ignored_user_id AS target_user_id, 'ignored' AS preference_type
      FROM ignored_users
      WHERE user_id = :acting_user_id AND ignored_user_id IN (:target_user_ids)
      UNION
      SELECT muted_user_id AS target_user_id, 'muted' AS preference_type
      FROM muted_users
      WHERE user_id = :acting_user_id AND muted_user_id IN (:target_user_ids)
    SQL
  end