discourse/plugins/chat/app/controllers/api/hints_controller.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

40 lines
1.1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class Chat::Api::HintsController < ApplicationController
before_action :ensure_logged_in
def check_group_mentions
RateLimiter.new(current_user, "group_mention_hints", 5, 10.seconds).performed!
group_names = params[:mentions]
raise Discourse::InvalidParameters.new(:mentions) if group_names.blank?
visible_groups = Group
.where("LOWER(name) IN (?)", group_names)
.visible_groups(current_user)
.pluck(:name)
mentionable_groups = filter_mentionable_groups(visible_groups)
result = {
unreachable: visible_groups - mentionable_groups.map(&:name),
over_members_limit: mentionable_groups.select { |g| g.user_count > SiteSetting.max_users_notified_per_group_mention }.map(&:name),
}
result[:invalid] = (group_names - result[:unreachable]) - result[:over_members_limit]
render json: result
end
private
def filter_mentionable_groups(group_names)
return [] if group_names.empty?
Group
.select(:name, :user_count)
.where(name: group_names)
.mentionable(current_user, include_public: false)
end
end