-
Notifications
You must be signed in to change notification settings - Fork 18
/
config.js
119 lines (103 loc) · 3.34 KB
/
config.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
const Twitter = require('twitter');
const fs = require('fs');
const Promise = require('bluebird')
const dotenv = require("dotenv")
dotenv.config()
// auth methods
const auth = () => {
let secret = {
consumer_key: process.env.API_KEY,
consumer_secret: process.env.SECRET_KEY,
access_token_key: process.env.ACCESS_TOKEN,
access_token_secret: process.env.ACCESS_TOKEN_SECRET
}
var client = new Twitter(secret);
return client;
}
// media upload methods
const initMediaUpload = (client, pathToFile) => {
const mediaType = "video/mp4";
const mediaSize = fs.statSync(pathToFile).size
return new Promise((resolve, reject) => {
client.post("media/upload", {
command: "INIT",
total_bytes: mediaSize,
media_type: mediaType
}, (error, data, response) => {
if (error) {
console.log(error)
reject(error)
} else {
resolve(data.media_id_string)
}
})
})
}
const appendMedia = (client, mediaId, pathToFile) => {
const mediaData = fs.readFileSync(pathToFile)
return new Promise((resolve, reject) => {
client.post("media/upload", {
command: "APPEND",
media_id: mediaId,
media: mediaData,
segment_index: 0
}, (error, data, response) => {
if (error) {
console.log(error)
reject(error)
} else {
resolve(mediaId)
}
})
})
}
const finalizeMediaUpload = (client, mediaId) => {
return new Promise((resolve, reject) => {
client.post("media/upload", {
command: "FINALIZE",
media_id: mediaId
}, (error, data, response) => {
if (error) {
console.log(error)
reject(error)
} else {
resolve(mediaId)
}
})
})
}
const postReplyWithMedia = (client, mediaFilePath, replyTweet) => {
initMediaUpload(client, mediaFilePath)
.then((mediaId) => appendMedia(client, mediaId, mediaFilePath))
.then((mediaId) => finalizeMediaUpload(client, mediaId))
.then((mediaId) => {
let statusObj = {
status: "Hi @" + replyTweet.user.screen_name + ", here's your video file!",
in_reply_to_status_id: replyTweet.id_str,
media_ids: mediaId
}
client.post('statuses/update', statusObj, (error, tweetReply, response) => {
//if we get an error print it out
if (error) {
console.log(error);
}
//print the text of the tweet we sent out
console.log(tweetReply.text);
});
})
}
const postReply = (client, message, replyTweet) => {
let statusObj = {
status: "Hi @" + replyTweet.user.screen_name + ", " + message,
in_reply_to_status_id: replyTweet.id_str,
}
client.post('statuses/update', statusObj, (error, tweetReply, response) => {
//if we get an error print it out
if (error) {
console.log(error);
}
//print the text of the tweet we sent out
console.log(tweetReply.text);
});
}
module.exports = { auth, postReplyWithMedia, postReply };