mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: allow re-scoping chat user search via a plugin (#26361)
This enables the following in Discourse AI
```
plugin.register_modifier(:chat_allowed_bot_user_ids) do |user_ids, guardian|
if guardian.user
mentionables = AiPersona.mentionables(user: guardian.user)
allowed_bot_ids = mentionables.map { |mentionable| mentionable[:user_id] }
user_ids.concat(allowed_bot_ids)
end
user_ids
end
```
some bots that are id < 0 need to be discoverable in search otherwise people can not talk to them.
---------
Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
This commit is contained in:
@@ -98,11 +98,17 @@ module Chat
|
||||
user_search = ::UserSearch.new(context.term, limit: 10)
|
||||
|
||||
if context.term.blank?
|
||||
user_search = user_search.scoped_users.real.includes(:user_option)
|
||||
user_search = user_search.scoped_users
|
||||
else
|
||||
user_search = user_search.search.real.includes(:user_option)
|
||||
user_search = user_search.search
|
||||
end
|
||||
|
||||
allowed_bot_user_ids =
|
||||
DiscoursePluginRegistry.apply_modifier(:chat_allowed_bot_user_ids, [], guardian)
|
||||
|
||||
user_search = user_search.real(allowed_bot_user_ids: allowed_bot_user_ids)
|
||||
user_search = user_search.includes(:user_option)
|
||||
|
||||
if context.excluded_memberships_channel_id
|
||||
user_search =
|
||||
user_search.where(
|
||||
|
||||
@@ -82,6 +82,27 @@ RSpec.describe Chat::SearchChatable do
|
||||
|
||||
expect(result.users).to_not include(current_user)
|
||||
end
|
||||
|
||||
context "when chat_allowed_bot_user_ids modifier exists" do
|
||||
fab!(:bot_1) { Fabricate(:user, id: -500) }
|
||||
fab!(:bot_2) { Fabricate(:user, id: -501) }
|
||||
|
||||
it "alters the users returned" do
|
||||
modifier_block = Proc.new { [bot_2.id] }
|
||||
plugin_instance = Plugin::Instance.new
|
||||
plugin_instance.register_modifier(:chat_allowed_bot_user_ids, &modifier_block)
|
||||
|
||||
expect(result.users).to_not include(bot_1)
|
||||
expect(result.users).to include(bot_2)
|
||||
expect(result.users).to include(current_user, sam, charlie, alain)
|
||||
ensure
|
||||
DiscoursePluginRegistry.unregister_modifier(
|
||||
plugin_instance,
|
||||
:chat_allowed_bot_user_ids,
|
||||
&modifier_block
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when not including users" do
|
||||
|
||||
Reference in New Issue
Block a user