UNPKG

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