в конце моей веревки. Я довольно новичок, когда дело доходит до кода, который я отчаянно пытался заставить, чтобы опубликовать URL-адрес в твиттере на мои разногласия. пока он только публикует основной текст твита, но если бы я мог заставить его опубликовать ссылку на твит, то я мог бы использовать предварительный просмотр твита вместо базового текста
, вот он. посмотрите и скажите мне, что вы думаете, я должен сделать, пожалуйста \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\
const E = require('events');
const request = require('request');
const separateReqPool = {maxSockets: 15};
const async = require('async');
const _ = require('lodash');
let tweets={},apiurls=[],N=[];
var THandlers=[
{
name:'',
url:"",
webhook:"",
avatar_url:"",
keywords:"*",
}
];
THandlers.forEach((th,i) => {
tweets[th.url] = [];
apiurls.push(th.url);
});
const sendDiscordMessage = (pl) => {
const {content,turl} = pl;
const {name,webhook,avatar_url} = THandlers.filter((d,i) => d.url === turl)[0];
request.post(webhook).form({username:name,avatar_url:avatar_url,content:content});
}
console.log('Twitter => Discord program is running');
setInterval(() => {
async.map(apiurls, function(item, callback){
request({url: item, pool: separateReqPool}, function (error, response, body) {
try {
const $ = cheerio.load(body);
var turl = "https://twitter.com" + response.req.path;
const th_name = THandlers.filter((d,i) => d.url === turl)[0].name;
if(!tweets[turl].length){
//FIRST LOAD
const turls = $('div.js-tweet-text-container').map((i,d) => d["attribs"]["data-permalink-path"]);
tweets[turl] = _.difference($('div.js-tweet-text-container p').map((i,d) => {return {url:turls[i],text:$('div.js-tweet-text-container p').eq(i).text()}}));
}
else{
//EVERY OTHER TIME
const turls = $('div.js-tweet-text-container').map((i,d) => d["attribs"]["data-permalink-path"]);
const ctweets = _.difference($('div.js-tweet-text-container').map((i,d) => {return {url:turls[i],text:$('div.js-tweet-text-container p').eq(i).text()}}));
const ntweets = ctweets.filter(t => !_.find(tweets[turl],t));
ntweets.filter(d => {
const th_kw = THandlers.filter((d,i) => d.url === turl)[0].keywords.split(',');
if(th_kw.includes('*')){
return true;
} else{
const checkTexts = th_kw.map(kw => d.text.includes(kw) ? true : false);
return checkTexts.includes(false) ? false : true;
}
}).forEach(t => {
const {text:content} = t;
sendDiscordMessage({content,turl});
});
tweets[turl] = [...tweets[turl],...ntweets];
}
} catch (e) {
console.log('Error =>' + e);
}
});
}, function(err, results){
});
},1000);