jefry 4 lat temu
rodzic
commit
d98bc7108a
4 zmienionych plików z 176 dodań i 96 usunięć
  1. +31
    -28
      api/session-data/controllers/session-data.js
  2. +11
    -2
      api/session-data/services/session-data.js
  3. +100
    -30
      config/functions/cron.js
  4. +34
    -36
      model/messageModel.js

+ 31
- 28
api/session-data/controllers/session-data.js Wyświetl plik

@@ -16,15 +16,14 @@ module.exports = {

messageModel.createNewClient(async function (data) {
// console.log(data);
var json = JSON.parse(data);
if (json["STATUS"] == 1 && json["TYPE"] == "READY") {
// console.log(json["DATA"]);
if (data["STATUS"] == 1 && data["TYPE"] == "READY") {
// console.log(data["DATA"]);
let checkExist = await strapi
.query("session-data")
.findOne({ phonenumber: json["DATA"].wid.user });
.query("session-data")
.findOne({ phonenumber: data["DATA"].wid.user });
if (checkExist) {
// messageModel.loadClient(async function(data){
// let state = JSON.parse(data);
// let state = data.parse(data);
// if (state["STATUS"] == 1 && state["TYPE"] == "READY"){
// let loaded = new Client();
// loaded = state["DATA"];
@@ -32,33 +31,37 @@ module.exports = {
// }
// });
let id = checkExist.id;
await strapi.services["session-data"].update({ id }, {
name:json["DATA"].pushname,
device_manufacturer:json["DATA"].phone.device_manufacturer,
device_model:json["DATA"].phone.device_model,
platform:json["DATA"].platform,
os_version:json["DATA"].phone.os_version,
phonenumber:json["DATA"].wid.user,
session_data:json["DATA"].sessionData,
});
}
else {
await strapi.services["session-data"].update(
{ id },
{
name: data["DATA"].pushname,
device_manufacturer:
data["DATA"].phone.device_manufacturer,
device_model: data["DATA"].phone.device_model,
platform: data["DATA"].platform,
os_version: data["DATA"].phone.os_version,
phonenumber: data["DATA"].wid.user,
session_data: data["DATA"].sessionData,
}
);
} else {
await strapi.services["session-data"].create({
name:json["DATA"].pushname,
device_manufacturer:json["DATA"].phone.device_manufacturer,
device_model:json["DATA"].phone.device_model,
platform:json["DATA"].platform,
os_version:json["DATA"].phone.os_version,
phonenumber:json["DATA"].wid.user,
session_data:json["DATA"].sessionData,
name: data["DATA"].pushname,
device_manufacturer:
data["DATA"].phone.device_manufacturer,
device_model: data["DATA"].phone.device_model,
platform: data["DATA"].platform,
os_version: data["DATA"].phone.os_version,
phonenumber: data["DATA"].wid.user,
session_data: data["DATA"].sessionData,
});
// console.log(entry);
}
}
}
res.write(data);
res.write(JSON.stringify(data));
if (
json["STATUS"] == 0 ||
(json["STATUS"] == 1 && json["TYPE"] == "READY")
data["STATUS"] == 0 ||
(data["STATUS"] == 1 && data["TYPE"] == "READY")
) {
return res.end();
}


+ 11
- 2
api/session-data/services/session-data.js Wyświetl plik

@@ -1,8 +1,17 @@
'use strict';
"use strict";

/**
* Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/services.html#core-services)
* to customize this service
*/

module.exports = {};
module.exports = {
getId: async (params) => {
const results = await strapi.query("session-data").find(params);
let arrKeys = [];
results.forEach((i) => {
if (!arrKeys.includes(i["id"])) arrKeys.push(i["id"]);
});
return arrKeys;
},
};

+ 100
- 30
config/functions/cron.js Wyświetl plik

@@ -11,40 +11,110 @@ const { parseMultipartData, sanitizeEntity } = require("strapi-utils");
* See more details here: https://strapi.io/documentation/developer-docs/latest/concepts/configurations.html#cron-tasks
*/
let clients = {};
let taskClientLoading = false;
let taskSendingMessage = false;
module.exports = {
"*/10 * * * * *": async () => {
const session_key = await strapi.api.message.services.message.distinctbyKey(
{
_sort: "session_datum_key:desc",
state: "QUEUE",
if (!taskClientLoading) {
console.log("refresh cients");
taskClientLoading = true;
const session_key = await strapi.api["session-data"].services[
"session-data"
].find({
_sort: "phonenumber:desc",
});
if (session_key.length == 0) taskClientLoading = false;
else {
session_key.forEach(async (i, indx) => {
if (!Object.keys(clients).includes(`${i["id"]}`)) {
clients[i["id"]] = null;
await messageModel.loadClient(
i["session_data"],
async (data) => {
if (
data["STATUS"] == 1 &&
data["TYPE"] == "READY"
) {
if (indx + 1 == session_key.length)
taskClientLoading = false;
clients[i["id"]] = data["DATA"];
return;
} else if (
data["STATUS"] == 0 &&
data["AUTH_FAILURE"]
) {
let id = i["id"];
await strapi.api["session-data"].services[
"session-data"
].delete({ id });
if (indx + 1 == session_key.length)
taskClientLoading = false;
return;
} else if (data["STATUS"] == 0) {
if (indx + 1 == session_key.length)
taskClientLoading = false;
return;
}
}
);
}
});
}
);
session_key.forEach(async (i)=>{
if(!Object.keys(clients).includes(`${i["id"]}`)){
clients[i["id"]] = null;
messageModel.loadClient(i["session_data"],async (data)=>{
var json = JSON.parse(data);
if (json["STATUS"] == 1 && json["TYPE"] == "READY") {
return clients[i["id"]] = json["DATA"];
}
else if(json["STATUS"] ==0){
return;
}
}
},
"*/3 * * * * *": async () => {
if (!taskSendingMessage) {
console.log("auto send", clients);
taskSendingMessage = true;
if (Object.keys(clients).length == 0) taskSendingMessage = false;
else {
Object.keys(clients).forEach(async (i, indx) => {
const sessions = await strapi.api["session-data"].services[
"session-data"
].getId({
_sort: "phonenumber:desc",
});
if (!sessions.includes(i)) {
delete clients[i];
} else {
const messages = await strapi.api.message.services.message.find(
{
_sort: "session_datum_key:desc",
state: "QUEUE",
session_datum_key: i,
}
);
messages.forEach(async (message) => {
console.log(clients[i] != null, i, clients);
if (clients[i] != null) {
await strapi.api.message.services.message.update(
{ id: message.id },
{ state: "SENDING" }
);
let send = await messageModel.sendMessage(
clients[i],
message["send_to"],
message["raw_text"]
);
if (send["STATUS"] == 1) {
await strapi.api.message.services.message.update(
{ id: message.id },
{ state: "SENT" }
);
} else {
await strapi.api.message.services.message.update(
{ id: message.id },
{ state: "ERROR" }
);
}
} else taskSendingMessage = false;
});
}

if (indx + 1 == Object.keys(clients).length)
taskSendingMessage = false;
});
}
})
console.log(clients);
// const messages = await strapi.api.message.services.message.find(
// {
// _sort: "session_datum_key:desc",
// state: "QUEUE",
// }
// );
// messages.forEach(async (message) => {
// await strapi.api.message.services.message.update(
// { id: message.id },
// { state: "SENT" }
// );
// });
}
},
};

+ 34
- 36
model/messageModel.js Wyświetl plik

@@ -11,72 +11,69 @@ const { parseMultipartData, sanitizeEntity } = require("strapi-utils");
var client;
//Login Session when there is Session File

function callbacks(client, callback,type="create") {
function callbacks(client, callback, type = "create") {
console.log("starting", type);
let sessionData;
client.on("auth_failure", (session) => {
console.log("auth_failure");
// clearFileSession(phoneNumber);
return callback(
JSON.stringify({
STATUS: 0,
TYPE: "AUTH_FAILURE",
DATA: "SESSION HAS BEEN ENDED , PLEASE CREATE A NEW ONE !",
})
);
// console.log("auth_failure");
return callback({
STATUS: 0,
TYPE: "AUTH_FAILURE",
DATA: "SESSION HAS BEEN ENDED , PLEASE CREATE A NEW ONE !",
});
});
client.on("disconnected", async function (session) {
console.log("disconnected from loading");
if (session == "UNPAIRED") {
try {
if (client && client.info) {
if (type == "load" && client && client.info) {
getID = await strapi
.query("session-data")
.findOne({ phonenumber: client.info.wid.user });

if (getID) {
let id = getID["id"];
await strapi.query("session-data").delete({ id });
await strapi.api["session-data"].services[
"session-data"
].delete({ id });
}
await client.destroy();
}
} catch (e) {}
}
});

client.on("ready", () => {
client.on("ready", async () => {
// console.log("ready");
var clientInfo = client.info;
clientInfo["sessionData"] = sessionData;
return callback(
JSON.stringify({
STATUS: 1,
TYPE: "READY",
DATA: (type=="create")?clientInfo:client,
})
);
if (type == "create") await client.destroy();
return callback({
STATUS: 1,
TYPE: "READY",
DATA: type == "create" ? clientInfo : client,
});
});
client.on("message", async (msg) => {
console.log("MESSAGE RECEIVED", msg.body);
// console.log("MESSAGE RECEIVED", msg.body);
});
client.on("qr", (qr) => {
return callback(
JSON.stringify({ STATUS: 1, TYPE: "QR_AUTH", DATA: qr })
);
return callback({ STATUS: 1, TYPE: "QR_AUTH", DATA: qr });
});

client.on("change_state", (state) => {
console.log(`state => ${state}`);
// console.log(`state => ${state}`);
});
client.on("authenticated", (session) => {
// console.log("authenticated");
try {
sessionData = session;
// fs.writeFileSync(SESSION_FILE_PATH, JSON.stringify(session));
} catch (e) {
return callback(
JSON.stringify({
STATUS: 0,
TYPE: "AUTHENTICATED_ERROR",
DATA: e.message,
})
);
return callback({
STATUS: 0,
TYPE: "AUTHENTICATED_ERROR",
DATA: e.message,
});
}
});
}
@@ -99,10 +96,11 @@ var loadClient = async function (clientSessionData, callback) {
restartOnAuthFail: true,
});

callbacks(client, callback,"load");
console.log("initialize");
callbacks(client, callback, "load");
// console.log("initialize");
client.initialize();
} catch (e) {
// console.log(e);
return callback({
STATUS: 0,
TYPE: "ERROR",
@@ -129,7 +127,7 @@ var createNewClient = async function (callback) {
}
};

var sendMessage = async function (phone_number, textMessage) {
var sendMessage = async function (client, phone_number, textMessage) {
try {
if (!client.info) {
throw { message: "Client Is Not Ready !" };


Ładowanie…
Anuluj
Zapisz