forked from ckirksey3/hot-dog-bot
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathindex.js
128 lines (114 loc) · 4.25 KB
/
index.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// HEROKU安装配置:Heroku是一个支持多种编程语言的云平台即服务。
var express = require("express");
var app = express();
// 引入AWS依赖,并配置使用区域
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
// 实例化
var rekognition = new AWS.Rekognition();
var request = require('request').defaults({ encoding: null });
app.get('/', function(req, res){ res.send('The robot is happily running.'); });
app.listen(process.env.PORT || 5000);
// 机器人List 配置
var config = {
me: 'IsItAHotdog', // 认证的账号,进行retweet.
regexFilter: '', // 只接受符合正则匹配完成的推文.
regexReject: '', // 拒绝不符合模式的推文.
keys: {
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY,
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
},
};
// retweet逻辑
function onReTweet(err) {
if(err) {
console.error("retweeting failed :(");
console.error(err);
}
}
function tweetBasedOnCategorization(tweet, isItAHotdog) {
var message = " This is NOT a hotdog";
if(isItAHotdog) {
message = " This is a hotdog";
}
tu.update({
status: "@" + tweet.user.screen_name + message,
in_reply_to_status_id: tweet.id_str
}, onReTweet);
}
// 对单条推文的操作.
function onTweet(tweet) {
// 如果满足以下条件,则拒绝:
// 1. 本身就是一条retweet
// 2. 匹配我们拒绝正则模式
// 3. 不匹配我们的接受正则模式
var regexReject = new RegExp(config.regexReject, 'i');
var regexFilter = new RegExp(config.regexFilter, 'i');
if (tweet.retweeted) {
return;
}
if (config.regexReject !== '' && regexReject.test(tweet.text)) {
return;
}
if (regexFilter.test(tweet.text)) {
console.log(tweet);
var has_image = false;
var image_url = '';
if(tweet.entities.hasOwnProperty('media') && tweet.entities.media.length > 0) {
has_image = true;
image_url = tweet.entities.media[0]['media_url'];
} else if (tweet.hasOwnProperty('extended_tweet')) {
if(tweet.extended_tweet.entities.hasOwnProperty('media') && tweet.extended_tweet.entities.media.length > 0) {
has_image = true;
image_url = tweet.extended_tweet.entities.media[0]['media_url'];
}
}
if(has_image) {
request.get(image_url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var params = {
Image: {
Bytes: body
},
MaxLabels: 20,
MinConfidence: 70
};
rekognition.detectLabels(params, function(err, data) {
if (err) console.log(err, err.stack);
else {
console.log(data);
var isItAHotdog = false;
for (var label_index in data.Labels) {
var label = data.Labels[label_index];
if(label['Name'] == "Hot Dog") {
if(label['Confidence'] > 85) {
isItAHotdog = true;
tweetBasedOnCategorization(tweet, true);
}
}
}
if(isItAHotdog == false) {
tweetBasedOnCategorization(tweet, false);
}
}
});
}
});
} else {
console.log("Tweet did not have an image")
}
}
}
// 监听twitter流,并且作出响应.
function listen() {
tu.filter({
track: 'isitahotdog'
}, function(stream) {
console.log("listening to stream");
stream.on('tweet', onTweet);
});
}
var tu = require('tuiter')(config.keys);
listen();