This repository has been archived by the owner on Oct 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
62 lines (53 loc) · 1.6 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const chalk = require('chalk');
const Twitter = require('twitter-lite');
const { log, error } = console;
const LOGO = String.raw`
$$\ $$$$$$\
$$ | $$ __$$\
$$$$$$$\ $$\ $$\ $$ / \__|
$$ __$$\ $$ | $$ |$$$$\
$$ | $$ |$$ | $$ |$$ _|
$$ | $$ |$$ | $$ |$$ |
$$ | $$ |\$$$$$$ |$$ |
\__| \__| \______/ \__|
`;
const parseTweet = (tweet) => {
const {
created_at: createdAt,
entities: { media },
text,
user: { name, screen_name: screenName },
} = tweet;
const medias =
media && media.length > 0 && media.map((m) => m.media_url_https).join(', ');
log(
`🐥 ${chalk.blueBright.bold(name)} ${chalk.blueBright.italic(
`@${screenName}`
)}`
);
log(`💬 ${chalk.white(text)}`);
if (medias && medias.length > 0) {
log(`🏙 ${medias}`);
}
log(chalk.grey(`🕘 ${createdAt}`));
log(`\n`);
};
async function setupTwitterClient() {
return new Twitter({
consumer_key: process.env.CONSUMER_KEY,
consumer_secret: process.env.CONSUMER_SECRET,
access_token_key: process.env.ACCESS_TOKEN,
access_token_secret: process.env.ACCESS_TOKEN_SECRET,
});
}
(async function huf() {
const twClient = await setupTwitterClient();
const params = { track: `#${process.env.HASHTAG}` };
twClient
.stream('statuses/filter', params)
.on('start', () => log(chalk.magenta(LOGO)))
.on('data', (tweet) => parseTweet(tweet))
.on('ping', () => log('🏓\n'))
.on('error', (err) => error('💣 ', err))
.on('end', () => log('👋🏻\n'));
})();