Coder Social home page Coder Social logo

liteloaderqqnt-anti-recall's Introduction

我既开始,我必完成;我既决定,我必贯彻。

Hi, 我是 XiaoHe321!

个人README仍在建设中~

liteloaderqqnt-anti-recall's People

Contributors

don-fon avatar flysoftbeta avatar sessionhu avatar sukwants avatar xh321 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

liteloaderqqnt-anti-recall's Issues

此处会空指针,改一下

image

  async function render() {
        // console.log("[Anti-Recall]", "尝试反撤回消息列表", recalledMsgList);

        var elements = document
            .querySelector(".chat-msg-area__vlist")
            ?.querySelectorAll(".ml-item");

        nowConfig = await window.anti_recall.getNowConfig();
        if(elements){
            for (var el of elements) {
                var findMsgId = recalledMsgList.find((i) => i == el.id);
                if (findMsgId != null) {
                    var msgId = findMsgId;
                    try {
                        var oldElement = el.querySelector(
                            `div[id='${msgId}-msgContainerMsgContent']`
                        );
    
                        var newElement = el.querySelector(
                            `div[id='${msgId}-msgContent']`
                        );
    
                        var unixElement = el
                            .querySelector(`div[id='ml-${msgId}']`)
                            ?.querySelector(".msg-content-container");
    
                        var cardElement = el.querySelector(
                            `div[id='${msgId}-msgContent']`
                        );
    
                        var arkElement = el.querySelector(
                            `div[id='ark-msg-content-container_${msgId}']`
                        );
    
                        if (oldElement != null) {
                            if (oldElement.classList.contains("gray-tip-message"))
                                continue;
                            await appendRecalledTag(oldElement);
                        } else if (newElement != null) {
                            if (newElement.classList.contains("gray-tip-message"))
                                continue;
                            await appendRecalledTag(newElement.parentElement);
                        } else if (unixElement != null) {
                            if (unixElement.classList.contains("gray-tip-message"))
                                continue;
                            await appendRecalledTag(unixElement.parentElement);
                        } else if (cardElement != null) {
                            if (cardElement.classList.contains("gray-tip-message"))
                                continue;
                            cardElement.classList.add("recalledNoMargin");
                            await appendRecalledTag(cardElement.parentElement);
                        } else if (arkElement != null) {
                            if (arkElement.classList.contains("gray-tip-message"))
                                continue;
                            arkElement.classList.add("recalledNoMargin");
                            await appendRecalledTag(arkElement.parentElement);
                        }
                    } catch (e) {
                        console.log("[Anti-Recall]", "反撤回消息时出错", e);
                    }
                }
            }
        }
        
    }

转发撤回消息bug

可以修一下这个bug,现在转发的时候转发的是撤回提示而不是消息本体,预期是转发消息本体

撤回未生效

普通私聊,纯文本消息,发送并收到两秒后撤回。
日志中似乎是生效了,但实际上仍只显示“对方撤回了一条消息”。

日志如下:

PS D:\Tencent\QQ NT> ./QQ
PS D:\Tencent\QQ NT> not mini app.
[preload] process type:
[app]module file name: D:\Tencent\QQ NT\QQ.exe
[preload] hotupdate base version: 9.9.8-22165
[preload] hotupdate current version: 9.9.8-22165
[preload] install app version: 9.9.8-22165

[preload] succeeded. D:\Tencent\QQ NT\resources\app\versions\9.9.8-22165\major.node
[preload] succeeded. D:\Tencent\QQ NT\resources\app\app_launcher\launcher.node
[preload] succeeded. D:\Tencent\QQ NT\resources\app\versions\9.9.8-22165\wrapper.node
[LiteLoader] Start finding all plugins.
[LiteLoader] Found plugin: 闃叉挙鍥?[LiteLoader] Found 1 plugins, start loading plugins.
[preload] register done. launcher.node
[preload] register done. major.node
Error occurred in handler for 'get-remote-win': Error: No handler registered for 'get-remote-win'
    at WebContents.<anonymous> (node:electron/js2c/browser_init:2:86829)
    at WebContents.emit (node:events:517:28)
[preload] register done. wrapper.node
Anti-Recall: NTQQ Anti-Recall loaded for window: app://./renderer/index.html?webcontentsid=2&processGroupNS=createBlankWindow1#/main/message
[app]module file name: D:\Tencent\QQ NT\QQ.exe
cc621fe1e05be5a530ed8eea572ce7115a8227bb3d049b3be59707768387890a
0679e503562cd4f0d1319ae0e876bea364f2d59d53050bbc87e3c4453c668a06
error code v2:-8
00:06:54.338 > [hot update] hotUpdateApi checkHasMultipleQQ false
00:06:54.339 > [hot update] hotUpdateApi start clearOldVersions
00:06:54.340 > [hot update] hotUpdateApi curVersionZipPath is: D:\Tencent\QQ NT\resources\app\versions\9.9.8-22165.zip false
00:06:54.383 > [hot update] hotUpdateApi checkHasMultipleQQ false
00:06:54.384 > [hot update] hotUpdateApi checkIsOnErrorVersion 9.9.8-22165
00:06:54.384 > [hot update] hotUpdateApi checkIsOnErrorVersion res is false
Anti-Recall: Detected recall, intercepted
Anti-Recall: Detected recall, intercepted

一开始还有更多报错,mkdir、Db is null之类的,用管理员权限打开、并设置saveDb=true后报错少了,但还是没效果。
“Found plugin: 闃叉挙鍥”在终端里就是乱码,明明我文件夹名称“qq-anti-recall”没有中文。

在较新版QQ上防撤回经常出现问题,版本9.9.8:22355

复现步骤:
打开QQ的状态下不直接点开群聊/私(如果直接有看群聊/私不会出现问题)
用小号在群/私内发送消息
小号撤回
大概率出现有提示尝试防撤回,但是防撤回失败的问题
[!Renderer:Log:2] [Anti-Recall] 尝试反撤回消息ID 7353757384477631478
(如下图)
image

私信同样会出现如上问题
测试了轻量工具箱(v2.22.2)的阻止撤回功能同样会出现此问题

请问可以在对方撤回之后显示一条提示信息吗

请问可以在对方撤回之后显示一条提示信息吗?比如对方撤回了一条消息:内容为:xxx 这样子。

如果显示内容很难的话,只提示对方撤回了一条消息也行,不然不知道对面撤没撤回挺尴尬的。

数据库支持

不知道作者有没有时间添加链接自己数据库的选项,

关于撤回功能的建议

可以创建一个db文件把消息往数据库存吗,我看你的介绍是存在内存里的,如果存数据库是不是就可以变成重启也会有效果?

在轻量工具箱开启自定义背景后无“已撤回”显示

未开启自定义背景:
QQ截图20240217130835

开启自定义背景:
QQ截图20240217130944

测试环境:

  • 操作系统版本:
    Windows 10 专业版 22H2 19045.4046 体验Windows Feature Experience Pack 1000.19053.1000.0

  • QQNT版本:
    9.9.7-21484 (64位)

  • 插件版本:
    LiteLoaderQQNT 1.0.3(最新)
    轻量工具箱 2.6.2(最新)
    防撤回 0.2.36(最新)

配置界面一片空白

插件仅开启本模块的情况下,配置界面一片空白啥都没有

  • qq版本 9.9.1-15717
  • 插件版本 0.28
  • LiteLoader版本 0.50
    image

mac安装成功无法打开QQ,提示无法打开“node.napi.node”,因为无法验证开发者。

环境:Mac m1
使用install_mac.sh安装LiteLoaderQQNT成功
可正常打开QQ并使用,可正常打开设置项盒插件商店。
在插件商店安装Anti-Recall后,重启QQ,失败,探出窗口

无法打开“node.napi.node”,因为无法验证开发者。
提示两次之后,弹出A JavaScript error occurred in the main process错误窗口

检查活动监视器里,没有QQ进程。

在plugins目录删除anti_recall目录后,QQ正常启动,插件商店里防撤回为未安装状态,再次安装一样

功能:撤回消息高级检索

如题,希望在本插件的设置页面增加一个“查看所有撤回的聊天信息”的按钮,点开后出现一个窗口,展示撤回消息数据库存储的信息(以列表的形式,每一条是一个群聊\好友,点进去是这个聊天所有撤回的消息,最新的显示在最上面,按时间排序),支持筛选器(时间,群聊,好友,等),支持搜索(群或好友名称,或被撤回内容),支持定位上下文,等等,如果你愿意添加这些功能,非常感谢!

bug

9.9.2.15962 +1被撤回的消息 撤回提示显示已撤回
image

有关反撤回的限制

正如README中说明的那样,渲染层拦截的反撤回只是暂时的,重新加载数据后就会被“覆盖”——从逻辑层获取的数据中,仅包含撤回提示,并不包含被撤回的消息了。
那么,要真正实现反撤回,我认为需要做到:

  1. 要么从根本上拦截撤回消息包(深入逻辑层拦截),DLL劫持可以做到,但JS应该不行。
  2. 要么本地储存被撤回的消息,在获取消息列表的时候patch上去。
    方案一不适用于本框架,方案二目前已经部分实现。

Mac在看到撤回消息以后,点一下别的消息框,然后再点回来,已撤回字样和颜色阴影啥的都没了,就是普通的消息了

有两个问题,
第一:Mac在看到撤回消息以后,点一下别的消息框,然后再点回来,已撤回字样和颜色阴影啥的都没了,就是普通的消息了
第二:当你打开一个新的聊天框,假如这个里面有一个撤回的消息,我点进去以后,撤回的消息和没有撤回的消息没有区分的标志,区分不了哪个是撤回的哪个是没撤回的

[adaptation] 22106 更改了部分事件名称导致防撤回失效

nodeIKernelMsgListener/onRecvMsg 变更为 nodeIKernelMsgListener/onRecvActiveMsg
nodeIKernelMsgListener/onMsgInfoListUpdate 变更为 nodeIKernelMsgListener/onActiveMsgInfoUpdate
我只用到了这两个,其他事件名称可能也有所变动,需要自己再找一下

防撤回提示位置出错

只需要窗口处于打开状态即可触发,关闭窗口重开可恢复正常 关闭QQ重开可以恢复
b00ad3b52258d07d20b846a56e68bec0
无法恢复正常

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.