Greasy Fork is available in English.
监听消息通知进行提示
当前为
// ==UserScript==
// @name WorkTile通知脚本
// @namespace YXKJ.WorkTile.lzg
// @license MIT
// @version 0.1
// @description 监听消息通知进行提示
// @author Lzg
// @match https://*.worktile.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=worktile.com
// @grant GM_xmlhttpRequest
// @connect qyapi.weixin.qq.com
// ==/UserScript==
// 获取数据
function getApiData(url,method = 'GET',data) {
let header = {}
if(method === 'POST') {
header = {'Content-Type': 'application/json'}
}
return new Promise(resolve => GM.xmlHttpRequest({
header,
method,
url,
data,
onload: function (response) {
if (response.status >= 200 && response.status < 400) {
resolve(response.responseText);
} else {
console.error(`Error getting ${url}:`, response.status, response.statusText, response.responseText);
resolve();
}
},
onerror: function (response) {
console.error(`Error during GM.xmlHttpRequest to ${url}:`,response);
resolve(response);
}
}));
}
(function() {
'use strict';
// https://dtgf20221013065733307.worktile.com/api/user/me?t=1666150680508
// https://dtgf20221013065733307.worktile.com/api/user/me
const originUrl = window.location.origin
let timeStamp = (new Date).getTime()
const time = 5000
var userinfo = false
var projectName = ''
const tipsObj = {infodata:[]}
let notificationPush = false
const WebHookUrl = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=8cf1621a-d9f3-47cb-8a94-7692aee68f90'
// 检测是否登录(借助原本网站会跳页的性质只需获取一次)
getApiData(originUrl + '/api/user/me?t=' + timeStamp).then((res)=>{
const jsonData = res && JSON.parse(res)
userinfo = jsonData?.data?.me ?? false
}).catch(()=>{
clearInterval(setIntervalFunc)
})
// 获取企业名称
getApiData(originUrl+'/api/team?t='+timeStamp).then((res)=>{
const jsonData = res && JSON.parse(res)
projectName = jsonData?.data?.name
}).catch(()=>{
clearInterval(setIntervalFunc)
})
// 每隔5s获取数据
var setIntervalFunc = setInterval(()=>{
if(userinfo){
handleNotificationData()
timeStamp = (new Date).getTime()
}else{
setIntervalFunc && clearInterval(setIntervalFunc)
}
},time)
// 处理通知数据
async function handleNotificationData(){
try {
const data = await getApiData(originUrl+'/api/team/chats?t='+timeStamp)
const jsonData = data && JSON.parse(data)
const infodata = []
let info = projectName + '\n\n'
jsonData?.data?.sessions?.map(item => {
if(item.unread){
infodata.push({name:item?.to?.display_name,unread:item.unread})
info += item?.to?.display_name + '发来'+ item.unread + '条消息\n'
}
})
info+='\n请注意查看'
// 判断与上次是否相同
if(infodata.length > 0){
infodata.map(item => {
if(!tipsObj.infodata.find(item1 => item.name === item1.name && item.unread === item1.unread)){
notificationPush = true
}
})
// 如果条数不对应也需要进行推送
notificationPush = notificationPush ? notificationPush : (tipsObj.infodata.length !== infodata.length)
}
// 同步数据
tipsObj.infodata = infodata
// 推送通知
if(notificationPush){
notificationPush = false
const webhook_data = {"msgtype": "text","text": {"content": info,"mentioned_mobile_list":[userinfo.mobile]}}
handleWebHook(JSON.stringify(webhook_data))
}
if(jsonData.code !== 200){
setIntervalFunc && clearInterval(setIntervalFunc)
}
} catch (error) {
setIntervalFunc && clearInterval(setIntervalFunc)
}
}
// 通知
function handleWebHook(data){
getApiData(WebHookUrl,'POST',data).catch(()=>{
console.log(setIntervalFunc)
setIntervalFunc && clearInterval(setIntervalFunc)
})
}
})();