mcdanlj
(Michael K Johnson)
22
您的意思是,您之前有支持线程的规则,但在最近一次更新后,线程功能不再生效?还是说,您期望在更新后该功能开始支持线程,但实际上并未实现?
我当前运行的是 discourse 093ee1d80c 和 discourse-chat-integration da91061(当前最新版本)。对于设置了 thread 规则的信道,其回复确实正确地以线程形式组织;但仅适用于配置了 thread 规则的信道。
能否展示您为线程规则所配置的示例?在“管理 → 插件 → 聊天集成”中,您应该能看到类似如下所示的规则:
点击编辑铅笔图标后,您应该看到:
如果您的规则显示为:
那么这些规则将不会使用线程功能。
上述说明也解释了为何该配置是按规则而非按站点进行设置的。
当您通过 Slack 中的 /discourse 命令(或您在设置集成时选择的任何命令)来创建规则时,请使用 thread 而非 watch 或 follow,具体可参考文档:Discourse Chat Integration
2 个赞
sunjam
(james.network)
23
好的,我需要检查所有 Slack 集成,并将每一个实例中的:
All Posts and Replies 更改为 All posts with threaded replies。
目前,我们在大多数频道集成中显示所有帖子和回复。从现在开始,如果只显示带有线程回复的所有帖子,会不会造成任何问题?我之所以这么问,是因为我有大量频道需要重新配置,所以最好一次性正确地重新分配设置。:+
mcdanlj
(Michael K Johnson)
24
如果我理解正确的话:不会,它不会“搞砸任何事”——它的设计初衷是安全的,因为它绝不会阻止向 Slack 发送新通知;只是说,如果 集成已知某个线程,它会将消息发送到该线程,而不是频道。如果出于任何原因它不知道某个线程的上下文,那么它会按照规则配置发送到频道。
“所有带线程回复的帖子”意味着:
- 当新帖子添加到现有主题时:
- 如果该主题已存储了线程 ID,则使用该 ID 发布为线程消息
- 如果该主题未存储线程 ID,则在将通知发布到 Slack 后,使用该新 Slack 帖子的线程 ID 作为该主题后续帖子的线程起点。从此之后,消息将按线程方式发送。
- 当新主题发布到 Slack 时,存储其生成的线程 ID,以便该主题的后续帖子以线程回复的形式发送到 Slack。
我将其总结为:“表现得就像 watch 插件一样,只是_如果_它知道要发布到哪个线程,就发布到那里。”
此外,当使用“转录”功能将 Slack 内容作为新主题发布到 Discourse 时,无论_任何_规则设置如何,它_始终_会尝试存储线程 ID。这样,如果_已经存在_或_将来添加_了 thread 规则,Discourse 中新主题的回复就会在相应的 Slack 线程中通知。
我相信你可以通过运行一些 bin/rails c 命令来修改现有规则,但我不想对我的在线站点做这种操作,因为我特意选择了哪些频道需要线程化、哪些不需要。而且我对 Ruby 还太生疏,不敢在论坛上随意输入 Ruby 代码作为帮助建议,以免搞砸。
除了它大概以 DiscourseChat::Rule.where( 开头之外,我帮不上太多忙。抱歉!
4 个赞
mcdanlj
(Michael K Johnson)
25
@sunjam 顺便说一句,我很感激你认可这项功能具有实用价值!尤其是考虑到一个讽刺的事实:我自己其实并不特别喜欢 Slack 风格的线程,却为了那些认为它们更有价值的用户做了这项工作!
我想象,在用户界面中添加一个按钮,将所有 watch 规则转换为 thread 规则,这听起来是合理的。然而,我实际上并不具备足够的知识来实现它,而且我自己也不会使用它。我本质上是一名后端开发者,只是在 Discourse 上稍作尝试,因此即使有人提交添加此类按钮的 PR,我也无法提供有价值的代码审查。如果有人愿意实现这项功能,我唯一能做的就是做一个毫无作用的啦啦队队员。
1 个赞
sunjam
(james.network)
26
我发现了一个问题 @mcdanlj。在创建新的频道集成时,2.6 beta1 测试中通过过滤器的线程回复不会显示。一旦集成创建完成,通过编辑该集成即可将其变为一个选项。
mcdanlj
(Michael K Johnson)
27
我现在也看到了同样的情况;我甚至没注意到那里的 UI,我是用 Slack 的斜杠命令创建规则的。
根据我对前端代码有限的理解,我认为这是 @david 要求隐藏其他集成类型中 thread 的代码遗留问题:
@computed("channel.provider")
available_filters(provider) {
const available = [];
if (provider === "slack") {
available.push({
id: "thread",
name: I18n.t("chat_integration.filter.thread"),
icon: "chevron-right"
});
}
我可能说错了。
但我真的是后端开发者,不知道该怎么修复这个问题。我不明白为什么 channel.provider 在编辑现有规则时是 slack,而在创建新规则时却不是。
mcdanlj
(Michael K Johnson)
29
我确认问题已为我修复。感谢 @david 帮我清理了我之前不了解的内容!
1 个赞
mcdanlj
(Michael K Johnson)
30
@sunjam 顺便一提,在决定将大部分(但非全部)Slack 集成规则从 watch 迁移到 thread 后,我感同身受。我的眼睛确实变得模糊,也很庆幸终于完成了。所以我不确定自己在工作中会做出哪些不同的调整,但我绝不会低估转换工作所需的付出。至少这是一次性成本。
如果存在一条可以在 Rails 控制台中运行的单行命令,用于将所有普通 watch 规则批量转换为 thread 规则,我还没有找到——否则我早就用它来转换了,然后再把少数需要保留为 watch 规则的几条改回来。
2 个赞
sunjam
(james.network)
31
线程回复是否显示在 Slack 侧的 所有未读 和 线程 中?我见过新帖子出现,但线程回复似乎不会触发这些通知。
mcdanlj
(Michael K Johnson)
32
Discourse 发布的消息并不会以不同于普通 Slack 线程的方式发送通知,但这实际上已经超出了 Discourse 的范畴,涉及 Slack 线程通知的工作机制。我认为 Slack 的线程通知规则并不理想,但 Slack 并非开源项目,任何人都无法随意贡献改进。你必须参与或订阅某个 Slack 线程,才能收到该线程后续帖子的通知。至少,这是本周的规则。我记得线程刚在 Slack 中推出时,是遵循所在频道的通知规则的。我在 Slack 中找不到任何设置,让线程通知跟随频道通知,这让我非常抓狂,因为因此我在工作中错过了一些重要信息。
我非常不喜欢 Slack 对线程的实现方式,以至于极具讽刺意味的是,竟然由我来实现这个功能。但我也认为我属于少数派,而我实现它,是为了让 Discourse 对大多数真正欣赏 Slack 线程功能的用户更具吸引力。
1 个赞
sunjam
(james.network)
33
感谢您的澄清。看来涉及 ThreadExample 的人会看到线程回复,这已经足够好用。无论如何,这是在 Slack 端简化界面的非常有用的选项,而且我希望它能激励其他聊天集成也采用类似的概念变体!
1 个赞
mcdanlj
(Michael K Johnson)
34
这是真的,其中“相关人员”包括那些在帖子中点击三个垂直点菜单并选择“关注帖子”(第一个选项)的人。
我刚刚意识到帖子中之前有设计稿,但我从未分享过实际操作的示例。因此,从今天起,在 https://forum.makerforums.info/c/k40 的 Slack 频道中,我们有以下内容:
3 个赞
mcdanlj
(Michael K Johnson)
36
非常感谢 @david 修复了我的 bug,该 bug 导致发布转录内容时未遵循 thread_id 设置,而是发布到了频道中!
2 个赞
k4rtik
(Kartik)
37
你好 @mcdanlj
非常感谢你启用了 Slack 上 Discourse 话题的同步功能。我注意到的一个问题是,如果我在单独一行粘贴链接以生成 Onebox 预览,该链接在 Slack 线程中发布时会完全消失,我只看到一行空白。在我的情况下,该链接被夹在两行文本之间,而这两行文本发布正常。
mcdanlj
(Michael K Johnson)
38
我所做的操作并未更改已发布消息的_内容_,只是有时会设置目标线程。
我建议针对发布到 Slack 的消息中的格式问题,单独提交一个错误报告并开设一个单独的讨论线程。我尚未查看或接触过该部分。
1 个赞
sunjam
(james.network)
39
tl;dr:在将主题移入 Slack 时,移动主题会导致线程失效。
我注意到,在 Discourse 中将主题在不同分类之间移动,似乎会破坏 Slack 频道中的线程功能。这通常发生在用户在一个分类中创建主题,然后将其移动到另一个为不同 Slack 频道设置的分类时。
由于帖子 A 被移动,它不再将线程回复发送到 Slack 上的同一位置。这意味着在 Slack 端完全看不到这些回复。如果您保持回复为独立形式(不使用线程),就可以避免这一潜在问题。
mcdanlj
(Michael K Johnson)
40
这倒是有几分道理。在那种情况下,我甚至不知道该怎么做才是对的……
1 个赞
sunjam
(james.network)
41
不确定,但我觉得值得提一下。一个变通方法是让集成在某个特定的额外 Slack 频道中可用,且不启用线程功能,这样它至少会出现在一个频道中。