trusted-setup-server/server/attestationWatcher.js

99 lines
2.6 KiB
JavaScript
Raw Normal View History

2020-02-25 15:13:09 +01:00
const fs = require('fs')
const Twitter = require('twitter')
const {
TWITTER_CONSUMER_KEY,
TWITTER_CONSUMER_SECRET,
TWITTER_ACCESS_TOKEN_KEY,
TWITTER_ACCESS_TOKEN_SECRET,
2020-03-02 08:58:11 +01:00
TWITTER_HASHTAG,
2020-02-29 10:17:53 +01:00
TWITTER_INTERVAL_ATTESTATION,
NODE_ENV
2020-02-25 15:13:09 +01:00
} = process.env
const client = new Twitter({
consumer_key: TWITTER_CONSUMER_KEY,
consumer_secret: TWITTER_CONSUMER_SECRET,
access_token_key: TWITTER_ACCESS_TOKEN_KEY,
access_token_secret: TWITTER_ACCESS_TOKEN_SECRET
})
const { Contribution } = require('./models')
2020-02-29 10:17:53 +01:00
function attestationWatcher() {
2020-02-25 15:13:09 +01:00
// get the last saved tweet
let initTweet
try {
initTweet = require('/tmp/lastTweet.json').lastTweet
} catch (e) {
2020-02-29 10:17:53 +01:00
initTweet = 0
2020-02-25 15:13:09 +01:00
}
const params = {
since_id: initTweet,
q: `contribution #${TWITTER_HASHTAG} -filter:retweets`,
2020-02-25 15:13:09 +01:00
result_type: 'recent',
count: 100
}
// search tweets with params
2020-02-29 10:17:53 +01:00
client.get('search/tweets', params, async function(error, tweets, response) {
2020-02-25 15:13:09 +01:00
if (!error) {
2020-02-29 10:17:53 +01:00
for (const tweet of tweets.statuses) {
if (NODE_ENV === 'development') {
console.log(
'\x1B[36m%s\x1B[0m',
`${tweet.text} https://twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}`
)
}
// find the contribution id in a tweet
let matchTweetContributionId = null
let tweetContributionId = null
if ((matchTweetContributionId = tweet.text.match(/#([0-9]+)/))) {
tweetContributionId = Number(matchTweetContributionId[1])
}
// if found the contribution id then search a contribution
if (tweetContributionId) {
// try update the database record by id
try {
const result = await Contribution.update(
{ attestation: tweet.id_str },
{
where: {
id: tweetContributionId,
handle: tweet.user.screen_name,
attestation: null
}
}
2020-02-25 15:13:09 +01:00
)
2020-02-29 10:17:53 +01:00
if (result[0]) {
console.log(
`Succesful attestation #${tweetContributionId} https://twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}`
)
}
} catch (error) {
console.error(error)
2020-02-25 15:13:09 +01:00
}
2020-02-29 10:17:53 +01:00
}
}
2020-02-25 15:13:09 +01:00
// save the last tweet received
fs.writeFileSync(
'/tmp/lastTweet.json',
JSON.stringify({ lastTweet: tweets.search_metadata.max_id_str })
)
} else {
console.error('attestationWatcher error', error)
}
})
setTimeout(() => {
attestationWatcher()
}, TWITTER_INTERVAL_ATTESTATION)
}
module.exports = attestationWatcher