有大佬知道如何屏蔽飞书已读嘛?

2023-04-24 22:12:37 +08:00
 Bananana
我想到的可能是屏蔽飞书长链接?
1915 次点击
所在节点    程序员
4 条回复
kasusa
2023-04-25 09:53:43 +08:00
在网络请求层搞吧?
找一下发回已读的包,分析一下特征然后全都拦截掉。就不会已读了。
zwzwzwzwzxt
2023-04-25 10:40:16 +08:00
我搞过电脑端的。它的判断逻辑是在 js 代码里的,特别好改。飞书安装目录的 `app/webcontent/messenger` 下面有一堆 js 文件,用文本搜索工具搜一下 `info("updateMessagesMeRead",` 代码片段,应该会在若干 js 文件中找到它。查看文件内容应该可以看到类似这样(我格式化了)的函数:

```js
function se(e) {
const t = function(e) {
const {channel: t, messageIds: n=[], foldIds: s} = e
, {maxPosition: r=-1, maxPositionBadgeCount: i=0} = e
, {threadId: a, threadMaxPosition: o, threadMaxPositionBadgeCount: c} = e;
return {
channel: t,
messageIds: n,
maxPosition: r,
maxPositionBadgeCount: i,
threadId: a,
threadMaxPosition: o,
threadMaxPositionBadgeCount: c,
foldIds: s
}
}(e);
return d.Z.info("updateMessagesMeRead", (0,
N.$h)({
...t
}, ["channel", "maxPosition", "maxPositionBadgeCount", "messageIds", "threadId", "threadMaxPosition", "threadMaxPositionBadgeCount"])),
(0,
y.callApi)(I.b0f, t)
}
```

最后那个 `y.callApi` 就会把 t 传过去调 native 层的函数来向服务器发包。`messageIds` 就是要执行已读的消息 id 数组。我的做法是在 `return d.Z.info` 之前加一条语句:`t.messageIds = [];`。把之前搜到的 js 文件都改一下(虽然好像只有一个真正会生效),重启下飞书就行了。

不过这个目前还不够完美,如果对其他人的消息贴表情或者回复他那一条消息,还是会把那个消息变成已读。估计它们应该走的不同的逻辑。确实还是在 native 层集中拦截网络包更好一些,js 里东一块西一块还是挺烦的。
zwzwzwzwzxt
2023-04-25 10:45:13 +08:00
我的定位这个函数的方法就是给飞书加一个启动参数:`--remote-debugging-port=9222`。这样用 chrome 访问 `chrome://inspect` 就能远程调试飞书的 js 代码了。打开飞书聊天页面,用元素审查器定位到聊天框。监听节点属性变化,然后一路单步调试找到的。希望能抛砖引玉一下。顺便一提,v 站不支持 markdown 的嘛。。
Bananana
2023-04-25 23:30:56 +08:00
@zwzwzwzwzxt 牛逼。真的可以,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/935176

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX