UNPKG

9.85 kBJavaScriptView Raw
1import clor from 'clor'
2import loudRejection from 'loud-rejection'
3import TwitBot from 'twitbot-core'
4import * as util from 'twitbot-util'
5import omit from 'object.omit'
6import debug from 'debug'
7
8const log = debug('twitbot:cli')
9loudRejection()
10
11export default function (cmd, extra, version) {
12 switch (cmd) {
13 case 'profile' :
14 (async() => {
15 try {
16 if (extra.import) {
17 const result = await util.settingsSave(`users`, require(extra.import).users)
18 console.log(` ${clor.green(result)}`)
19 } else if (extra.export) {
20 console.log(JSON.stringify(util.twitbotSettings.get()))
21 } else {
22 const answers = await util.prompt('config')
23 const result = await util.settingsSave(`users:${answers.username}`, answers)
24 console.log(` ${clor.green(result)}`)
25 }
26 } catch (err) {
27 log(err)
28 process.exit(1) // eslint-disable-line xo/no-process-exit
29 }
30 })()
31 break
32 case 'search':
33 (async() => {
34 if (util.checkUser()) {
35 try {
36 let check = null
37 let lang = null
38 const answers = await util.prompt('search')
39 const confd = util.getUser(answers.select_account)
40 const T = new TwitBot(confd)
41 const msg = util.spinnerMsg(`Twitbot working.. `)
42
43 if (answers.lang !== 'none') {
44 lang = answers.lang
45 }
46
47 const twetList = await T.extra.fullSearch({q: answers.keyword, takip_sayi: answers.takip_sayi, lang})
48 let favoriteList = null
49 let userList = null
50 const blocks = await T.extra.fullBlocks()
51
52 const checkBlock = util.notActionBlocks(blocks)
53 const checkName = util.notActionHimself(answers.select_account)
54
55 check = twetList.filter(twet => checkName(twet) !== false).filter(twet => checkBlock(twet) !== false)
56
57 if (extra.src) {
58 const extraMiddleware = require(extra.src)
59 if (extraMiddleware.blacklist) {
60 const extraBlacklist = extraMiddleware.blacklist(extra)
61 check = check.filter(twet => extraBlacklist(twet) !== false)
62 }
63 }
64
65 if (lang !== null) {
66 const checkLang = util.okActionLanguage(lang)
67 check = check.filter(twet => checkLang(twet) === true)
68 }
69
70 check = check.slice(0, answers.takip_sayi)
71
72 userList = check.map(twet => twet.user.id_str)
73 favoriteList = check.map(twet => twet.id_str)
74
75 if (answers.takip === 'Yes') {
76 userList = await T.extra.fullUserFollow(userList)
77 }
78
79 if (answers.favorite === 'Yes') {
80 favoriteList = await T.extra.fullFavoriteList(favoriteList)
81 }
82
83 clearInterval(msg)
84 console.log(` ${clor.green('Transactions completed.')}`)
85 if (answers.takip === 'Yes') {
86 console.log(` ${clor.yellow(`${userList.length} people were followed.`)}`) // check userList error
87 }
88 if (answers.favorite === 'Yes') {
89 console.log(` ${clor.yellow(`${favoriteList.length} tweets favorite added.`)}`) // check favoriteList error
90 }
91 } catch (err) {
92 log(err)
93 process.exit(1) // eslint-disable-line xo/no-process-exit
94 }
95 } else {
96 console.log(`${clor.red('First, you must define an account [ > twitbot new]')}`)
97 }
98 })()
99 break
100 case 'unfavorite' :
101 (async() => {
102 if (util.checkUser()) {
103 try {
104 const {select_account} = await util.prompt('accountlist')
105 const confd = util.getUser(select_account)
106 const T = new TwitBot(confd)
107 const msg = util.spinnerMsg(`Twitbot working.. `)
108 const favoriteList = await T.extra.fullFavorites()
109 await T.extra.fullDestoryFavorite(favoriteList.map(item => item.id_str))
110 clearInterval(msg)
111 console.log(` ${clor.green('All favorites removed')}`)
112 } catch (err) {
113 log(err)
114 process.exit(1) // eslint-disable-line xo/no-process-exit
115 }
116 } else {
117 console.log(`${clor.red('First, you must define an account [ > twitbot new]')}`)
118 }
119 })()
120 break
121 case 'flush' :
122 (async() => {
123 if (util.checkUser()) {
124 const users = util.getUsers()
125 let answers = null
126 try {
127 if (extra.noPrompt) {
128 answers = extra
129 } else {
130 answers = await util.prompt('accountlist')
131 }
132 delete users[answers.select_account]
133 const msg = await util.settingsSave(`users`, users)
134 console.log(` ${clor.green(msg)}`)
135 } catch (err) {
136 log(err)
137 process.exit(1) // eslint-disable-line xo/no-process-exit
138 }
139 } else {
140 console.log(`${clor.red('First, you must define an account [ > twitbot new]')}`)
141 }
142 })()
143 break
144 case 'message':
145 (async() => {
146 if (util.checkUser()) {
147 try {
148 const answers = await util.prompt('messagelist')
149 const confd = util.getUser(answers.select_account)
150 const T = new TwitBot(confd)
151 const msg = util.spinnerMsg(`Twitbot working.. `)
152 if (answers.send === 'Yes' && answers.message) {
153 const followersList = await T.extra.fullFollowers()
154 const list = followersList
155 if (extra.blacklist) {
156 const blocksids = extra.blacklist.split(',')
157 list.filter(id => blocksids.indexOf(id) === -1)
158 }
159 const msgCount = await T.extra.fullUserMessage(list, answers.message).length
160 clearInterval(msg)
161 console.log(` ${clor.green(`Persons posted ${msgCount} messages `)}`)
162 } else {
163 console.log(`${clor.red('Come back when he decided to take a message..')}`)
164 }
165 } catch (err) {
166 log(err)
167 process.exit(1) // eslint-disable-line xo/no-process-exit
168 }
169 } else {
170 console.log(`${clor.red('First, you must define an account [ > twitbot new]')}`)
171 }
172 })()
173 break
174 case 'unfollow' :
175 (async() => {
176 if (util.checkUser()) {
177 try {
178 const answers = await util.prompt('unfollowlist')
179 const confd = util.getUser(answers.select_account)
180 const T = new TwitBot(confd)
181 if (answers.type === 'Yes') {
182 const msg = util.spinnerMsg(`Twitbot working.. `)
183 const fullListids = await T.extra.fullFollowers()
184 const result = await T.extra.fullUserDestroy(fullListids)
185 clearInterval(msg)
186 console.log(`${clor.red(`${result.length} users unfollowed..`)}`)
187 }
188 } catch (err) {
189 log(err)
190 process.exit(1) // eslint-disable-line xo/no-process-exit
191 }
192 } else {
193 console.log(`${clor.red('First, you must define an account [ > twitbot new]')}`)
194 }
195 })()
196 break
197 case 'watch' :
198 (async() => {
199 if (util.checkUser()) {
200 try {
201 let query = null
202 let confd = null
203 let takip = null
204 let favorite = null
205 let username = null
206 let lang = null
207 const actionList = []
208 const actionBlacklist = []
209 if (extra.noPrompt || extra.account || extra.query) {
210 confd = util.getUser(extra.account)
211 query = extra.query.split(',')
212 username = extra.account
213 if (extra.follow) {
214 takip = extra.follow
215 }
216 if (extra.favorite) {
217 favorite = extra.favorite
218 }
219 if (extra.lang) {
220 lang = extra.lang
221 } else {
222 lang = 'none'
223 }
224 } else {
225 const answers = await util.prompt('watch')
226 confd = util.getUser(answers.select_account)
227 query = answers.keywords.split(',')
228 username = answers.select_account
229 takip = answers.follow
230 favorite = answers.favorite
231 lang = answers.lang
232 }
233
234 if (extra.src) {
235 const extraMiddleware = require(extra.src)
236 if (extraMiddleware.use) {
237 actionList.push(extraMiddleware.use())
238 }
239
240 if (extraMiddleware.blacklist) {
241 actionBlacklist.push(extraMiddleware.blacklist(extra))
242 }
243 }
244
245 if (takip === 'Yes') {
246 actionList.push(util.actionUserFollow())
247 }
248
249 if (favorite === 'Yes') {
250 actionList.push(util.actionFavorite())
251 }
252
253 const T = new TwitBot(confd)
254
255 const blocks = await T.extra.fullBlocks()
256
257 if (lang !== 'none') {
258 actionBlacklist.push(util.okActionLanguage(lang))
259 }
260
261 actionBlacklist.push(util.notActionHimself(username))
262 actionBlacklist.push(util.notActionBlocks(blocks))
263
264 const stream = T.tweetStream({track: query})
265 const msg = util.spinnerMsg(`Twitbot working.. `)
266 stream.on('tweet', twet => {
267 util.control(twet, actionBlacklist).then(result => {
268 if (result) {
269 util.action(twet, extra, T, actionList)
270 }
271 }).catch(err => {
272 // Houston we have a problem
273 log(err)
274 })
275 })
276
277 stream.on('disconnect', disconnectMessage => {
278 clearInterval(msg)
279 console.log(disconnectMessage)
280 stream.start()
281 })
282 } catch (err) {
283 log(err)
284 process.exit(1) // eslint-disable-line xo/no-process-exit
285 }
286 } else {
287 console.log(`${clor.red('First, you must define an account [ > twitbot new]')}`)
288 }
289 })()
290 break
291 case 'use' :
292 (async() => {
293 if (util.checkUser()) {
294 try {
295 if (extra.src && extra.account) {
296 const {src, account} = extra
297 const args = omit(extra, ['src'])
298 const confd = util.getUser(account)
299 const T = new TwitBot(confd)
300
301 const extraMiddleware = require(src)
302
303 if (extraMiddleware.use) {
304 let middleware = extraMiddleware.use()
305 middleware = middleware.call(T, args)
306 }
307 } else {
308 console.log(`${clor.red(' --src=~/hello --account=johndoe ')}`)
309 }
310 } catch (err) {
311 log(err)
312 process.exit(1) // eslint-disable-line xo/no-process-exit
313 }
314 } else {
315 console.log(`${clor.red('First, you must define an account [ > twitbot new]')}`)
316 }
317 })()
318 break
319 case 'version':
320 console.log(version)
321 break
322 case 'help':
323 console.log(util.help())
324 break
325 default:
326 console.log(util.help())
327 }
328}