Introducing Discourse Chat (BETA)

thanks for adding the hide chats X buttons. a couple of points of feedback:

  1. the X buttons don’t appear at all on mobile (because they are hidden until you hover?), so you can’t leave personal chats on mobile currently
  2. can’t currently add a new personal chat - this error occurs, both on desktop and mobile
    image
3 Likes

This is a compromise for now, in a few months we will implement a swipe action on mobile to leave

Can you rebuild and try again ?

6 Likes

Hello, it works very well for me, only that on cell phones I do not see an option to close the chat.

3 Likes

+1 to the question of performance requirements.
I’m currently running a small droplet that’s consistently resource constrained. (yes I know I should upgrade to a bigger droplet :wink:)

1 Like

rarely. about 19 times out of 20 attempts to rebuild, one of the 50 git commands during the rebuild hangs forever. very odd. didn’t start happening until a few weeks ago.

3 Likes

Discourse Chat and category-lock (Pavilion’s one) are incompatible on my instance.

Backtrace Error log:

app/models/concerns/has_custom_fields.rb:173:in `[]'
plugins/discourse-category-lockdown/plugin.rb:16:in `block (2 levels) in activate!'
(eval):33:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:456:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
plugins/discourse-chat/app/serializers/chat_channel_serializer.rb:38:in `chatable'
(eval):4:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:456:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:124:in `block in serialize'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `map'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `serialize'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:368:in `block in include_associations!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `each_key'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `include_associations!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:362:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
app/controllers/application_controller.rb:486:in `serialize_data'
app/controllers/application_controller.rb:495:in `render_serialized'
plugins/discourse-chat/app/controllers/chat_channels_controller.rb:6:in `index'
actionpack (6.1.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
i18n (1.8.11) lib/i18n.rb:314:in `with_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.4.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.3.3) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'


actionpack (6.1.4.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.4.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
railties (6.1.4.1) lib/rails/engine.rb:539:in `call'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `method_missing'
actionpack (6.1.4.1) lib/action_dispatch/routing/mapper.rb:20:in `block in <class:Constraints>'
actionpack (6.1.4.1) lib/action_dispatch/routing/mapper.rb:49:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.4.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.1.4.1) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.4.1) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
request_store (1.5.0) lib/request_store/middleware.rb:19:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler (2.3.3) lib/mini_profiler/profiler.rb:249:in `call'


message_bus (4.0.0) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:198:in `call'
railties (6.1.4.1) lib/rails/engine.rb:539:in `call'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

Info Error log

StandardError (Attempted to access the non preloaded custom field 'redirect_url'. This is disallowed to prevent N+1 queries.)
app/models/concerns/has_custom_fields.rb:173:in `[]'
(eval):33:in `_fast_attributes'
(eval):4:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:486:in `serialize_data'
app/controllers/application_controller.rb:495:in `render_serialized'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Uncaught [object Object] error log

Uncaught [object Object]
Url: https://www.domainname.com/assets/vendor-96a5eaa8d436066b954c21ae5afb7f504310945c679465a2f1ba46b429a95edf.js
Line: 30
Column: 180630
Window Location: https://www.domainname.com/
3 Likes

When chat is enabled, how does it tie back to a user’s metrics? Does participation in chat count in any manner towards trust level growth/engagement?

And are there plans to add any metrics to the admin dashboard to track participation in chat?

3 Likes

I’m using the Discourse Chat for trust_level_3 members only and Category based (a category available only to trust_level_3 members). Can I as administrator automatically make all trust_level_3 members join the channel without them having to go through the channels lists and join themselves?

1 Like

No.

No.

It doesn’t in any way.

10 Likes
  • Does the chat submit to the same word blocking rules as posts?

  • Is there a way for the admins to check others personal chat? (Concerned about potential abuse. Private messages can be limited and monitored but chat seems an easy way to abuse)

6 Likes

Not yet, but we will make this happen

We have long term plans to support discourse encrypt with chat

Data at the moment is not encrypted in the DB

13 Likes

No. There will always be bugs. There are bugs in Discourse today, just as there are bugs in chat. We fix them as they’re reported to us.

Is chat safe enough to be installed? Yes. We’re using it extensively internally, and have been doing so so exclusively for almost 2 months. (We previously used Mattermost, and shut that down in early December) There are tiny bugs here and there, and plenty of features we still want to add, but it’s certainly safe to use.

16 Likes

Hello, and thanks for the great plugin, it really adds something interesting to discourse!

Quick question: is it possible or planned to have the chat icon within the profile or in the user card ?

It’s also unclear how chat messages end up notifying users by email and when? (the underlying question being: could we just replace the direct messages with the chat functionality?)

6 Likes

When inside a chat channel on mobile, I’ve noticed that I keep clicking the chat bubble in the header to try to go back to the chat channel list and it doesn’t take me anywhere. When I’m not in chat and I click it, it takes me to the chat channel list.

Is there any way to make this uniform, so that the chat bubble icon in the header will always take me to the chat channel list on mobile, whether I’m inside a chat channel or not?

7 Likes

Chat is not a theme component. It is a plugin.

10 Likes

Off topic feature: when that code does not detect an about.json but does find a plugin.rb, maybe present the user with a link to more specific instructions on how to install a plugin? This happens all the time.

11 Likes

Hi Tabata! Can you explain what you mean by this? What are you trying to do exactly? Everybody online can join chat channels, according to how you set them up.

5 Likes

I’m not sure if this is what she means, but for me, I’d like the option to have some chat channels to default to have everyone in group X join the chat automatically, so they don’t have to click thru and add the chat. For example, I’d like new members to automatically join the Welcome chat channel that I have. Right now, it seems each individual would have to manually add it and I don’t have much bulk control. Since Discourse does much of its member management at the group levels, I’d think perhaps an option at the group level could help.

Or instead, or in addition, I would love to have a chat channel settings page that is more similar to the category settings page, where I can give different access permissions to different groups. I want to create some chat channels where certain groups can read but can’t post and others where certain groups can’t see inside the chat. Ideally, I could even make one where non-logged in visitors could watch some chats, allowing me to almost fulfill my dream of having a public chat show.

4 Likes

That’s my take on it too. She wants an (public) chat channel open to everyone on the forum - without having to click through or be invited.

3 Likes

I think the color of that button is the same as your background color; you can add some CSS to change the color of those icons to be darker:

.chat-channels .new-dm .d-icon, .chat-channels .edit-channels-dropdown .select-kit-header .d-icon {
  color: var(--primary);
}
5 Likes