笨办法反撤回
// ==UserScript==
// @name 微博反撤回方案2
// @namespace http://tampermonkey.net/
// @version 0.11
// @description 笨办法反撤回
// @author @一只蠢狗君
// @match https://api.weibo.com/chat*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @require https://code.jquery.com/jquery-3.6.0.min.js
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @noframes
// ==/UserScript==
(function() {
'use strict';
//GM_setValue('groupid','4654626886913134'); //四哥群
GM_setValue('groupid','4524720329230254'); //tk群
GM_setValue('count','10'); //这里配置的是原始聊天内容缓存池的大小,指定temp变量里最多缓存多少条群友消息
var temp = [ ];
GM_setValue('temp',temp); //用temp全局变量来储存群友消息
var recall_data =[ ];
GM_setValue('recall_data',recall_data); // 用recall_data来储存‘已撤回’状态消息
var recall_count = 0; //对已储存的‘已撤回’消息条数进行计数
//写一个你期待定时执行程序能重复执行的函数
function timeless(){
GM_xmlhttpRequest( //油猴脚本插件自带的异步请求函数,我们主要在onload参数上作文章——即访问的链接加载完毕时,我们希望它运行哪些代码
{
method:'get',
url:'https://api.weibo.com/webim/groupchat/query_messages.json?convert_emoji=1&query_sender=1&count=' + GM_getValue('count') + '&id='+ GM_getValue('groupid') +'&max_mid=0&source=209678993',
headers:{'Host': 'api.weibo.com','Referer': 'https://api.weibo.com/chat'},
onload:function (response) {
let rsp = JSON.parse(response.responseText); //请求最新10条四哥群的群友消息,并获取到的返回内容json化
let m = parseInt(GM_getValue('count'));
for(let i=0;i < m;i++){ //遍历这最新10条消息的信息
let id = rsp["messages"][i]["id"]; // 分别用几个临时变量来储存获取时间id、内容、消息发送人昵称、消息状态
let content = rsp["messages"][i]["content"];
let name = rsp["messages"][i]["from_user"]["screen_name"];
let type = rsp["messages"][i]["type"];
if (type == 344) { //如果这条消息的状态是已撤回,那么执行以下操作,最后再跳过该条数据的储存(不把它记录在temp池里)
let recall_data01 = GM_getValue('temp').find(item => item.id == id); //如果这条已撤回状态的时间id,在之前的temp池进行搜索并把它提取出来赋值给recall_data01
if (recall_data01 != undefined){ // 如果这个值确实在temp池里是存在的,就执行以下操作
let r = GM_getValue('recall_data'); //调取‘已撤回’池,看这个已撤回的时间id在已撤回池里有没有添加过,如果已经添加过了,就不再重复添加;没添加过才新添加
if (r.find(item => item.id == id) == undefined){
r.push(recall_data01);
GM_setValue('recall_data',r);
};
continue;
}
};
let is_id_exist = GM_getValue('temp').find(item => item.id == id); // 如果是正常状态的消息,我们就在temp池里看它有没有被添加过,如果被添加过了,就跳过;没被添加过就新添加
if (is_id_exist == undefined) {
let newmember ={
id: id,
name: name,
content: content,
type:type
}
let a = GM_getValue('temp');
let b = a.length;
a.push(newmember);
if (b >= parseInt(GM_getValue('count'))){ //如果temp池里已经储存的数据大于预定配置的条数,就在新添加一条数据后,再删掉一条最老的数据
a.shift();};
GM_setValue('temp',a);
};
};
}
});
let n = GM_getValue('recall_data').length; //获取‘已撤回’池里的数据条数,如果比上一次登记的数据条数大,我们就往控制台输出一下最新的‘已撤回’池内容。如果没有新增的,我们就不要去反复输出
if (n > recall_count ){
console.log(GM_getValue('recall_data'));
recall_count = n;
};
}
setInterval(timeless, 3000); //让上面的这些代码,每隔3秒就运行一次
})();