dexscreener-obs/main.js

99 lines
2.9 KiB
JavaScript
Raw Normal View History

2024-03-02 14:57:32 -05:00
require('dotenv').config();
const axios = require('axios');
const WebSocket = require('ws');
const crypto = require('crypto');
const obsWebSocketUrl = 'ws://localhost:4444';
const password = process.env.OBS_PASSWORD;
const ws = new WebSocket(obsWebSocketUrl);
ws.on('open', () => {
console.log('Connected to OBS WebSocket server.');
ws.send(JSON.stringify({
'request-type': 'GetAuthRequired',
'message-id': 'authRequired'
}));
});
ws.on('message', (data) => {
const message = JSON.parse(data.toString());
if (message['message-id'] === 'authRequired') {
if (message.authRequired) {
const auth = generateAuth(password, message.salt, message.challenge);
ws.send(JSON.stringify({
'request-type': 'Authenticate',
'message-id': 'authenticate',
'auth': auth
}));
} else {
setInterval(updateOBSTextVisibility, 60000);
}
} else if (message['message-id'] === 'authenticate') {
if (message.status === 'ok') {
setInterval(updateOBSTextVisibility, 5000);
} else {
console.error('Authentication failed:', message.error);
}
} else if (message['message-id'] === 'setText') {
if (message.status === 'ok') {
console.log('Text updated successfully in OBS.');
} else {
console.error('Failed to update text in OBS:', message.error);
}
}
});
ws.on('error', (error) => {
console.error('WebSocket error:', error);
});
const setSourceVisibility = (sourceName, visible) => {
const message = {
'request-type': 'SetSourceRender',
'source': sourceName,
'render': visible,
'message-id': 'setSourceVisibility'
};
ws.send(JSON.stringify(message));
};
const updateOBSTextVisibility = (makingMoney) => {
setSourceVisibility("TextGreen", makingMoney);
setSourceVisibility("TextRed", !makingMoney);
};
const checkStatusAndUpdateOBS = () => {
const tokenAddress = process.env.tokenAddress;
axios.get(`https://api.dexscreener.com/latest/dex/tokens/${tokenAddress}`)
.then((response) => {
const pairs = response.data.pairs;
if (pairs && pairs.length > 0) {
const priceChange = pairs[0].priceChange.m5;
const makingMoney = priceChange > 0;
console.log(`Price Change (Last 5 Minutes): ${priceChange}%`);
console.log('Making Money:', makingMoney);
setSourceVisibility("TextGreen", makingMoney);
setSourceVisibility("TextRed", !makingMoney);
} else {
console.log('No pairs data found for the token address');
}
})
.catch((error) => {
console.error('Error fetching data:', error);
});
};
function generateAuth(password, salt, challenge) {
const secret = crypto.createHash('sha256').update(password + salt).digest('base64');
const authResponse = crypto.createHash('sha256').update(secret + challenge).digest('base64');
return authResponse;
}
setInterval(checkStatusAndUpdateOBS, 5000);