├── .gitignore ├── README.md ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # js-bot 2 | a twitter bot that's a fan of JavaScript 3 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const Twit = require('twit'); 2 | 3 | const T = new Twit({ 4 | consumer_key: process.env.APPLICATION_CONSUMER_KEY_HERE, 5 | consumer_secret: process.env.APPLICATION_CONSUMER_SECRET_HERE, 6 | access_token: process.env.ACCESS_TOKEN_HERE, 7 | access_token_secret: process.env.ACCESS_TOKEN_SECRET_HERE 8 | }); 9 | 10 | // start stream and track tweets 11 | const stream = T.stream('statuses/filter', { track: '#JavaScript' }); 12 | 13 | // use this to log errors from requests 14 | function responseCallback(err, data, response) { 15 | console.log(err); 16 | } 17 | 18 | // event handler 19 | stream.on('tweet', tweet => { 20 | // retweet 21 | T.post('statuses/retweet/:id', { id: tweet.id_str }, responseCallback); 22 | // like 23 | T.post('favorites/create', { id: tweet.id_str }, responseCallback); 24 | }); 25 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-bot", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ajv": { 8 | "version": "6.10.2", 9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", 10 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", 11 | "requires": { 12 | "fast-deep-equal": "^2.0.1", 13 | "fast-json-stable-stringify": "^2.0.0", 14 | "json-schema-traverse": "^0.4.1", 15 | "uri-js": "^4.2.2" 16 | } 17 | }, 18 | "asn1": { 19 | "version": "0.2.4", 20 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 21 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 22 | "requires": { 23 | "safer-buffer": "~2.1.0" 24 | } 25 | }, 26 | "assert-plus": { 27 | "version": "1.0.0", 28 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 29 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 30 | }, 31 | "asynckit": { 32 | "version": "0.4.0", 33 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 34 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 35 | }, 36 | "aws-sign2": { 37 | "version": "0.7.0", 38 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 39 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 40 | }, 41 | "aws4": { 42 | "version": "1.9.0", 43 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", 44 | "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" 45 | }, 46 | "bcrypt-pbkdf": { 47 | "version": "1.0.2", 48 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 49 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 50 | "requires": { 51 | "tweetnacl": "^0.14.3" 52 | } 53 | }, 54 | "bluebird": { 55 | "version": "3.7.2", 56 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 57 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 58 | }, 59 | "caseless": { 60 | "version": "0.12.0", 61 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 62 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 63 | }, 64 | "combined-stream": { 65 | "version": "1.0.8", 66 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 67 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 68 | "requires": { 69 | "delayed-stream": "~1.0.0" 70 | } 71 | }, 72 | "core-util-is": { 73 | "version": "1.0.2", 74 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 75 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 76 | }, 77 | "dashdash": { 78 | "version": "1.14.1", 79 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 80 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 81 | "requires": { 82 | "assert-plus": "^1.0.0" 83 | } 84 | }, 85 | "delayed-stream": { 86 | "version": "1.0.0", 87 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 88 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 89 | }, 90 | "ecc-jsbn": { 91 | "version": "0.1.2", 92 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 93 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 94 | "requires": { 95 | "jsbn": "~0.1.0", 96 | "safer-buffer": "^2.1.0" 97 | } 98 | }, 99 | "extend": { 100 | "version": "3.0.2", 101 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 102 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 103 | }, 104 | "extsprintf": { 105 | "version": "1.3.0", 106 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 107 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 108 | }, 109 | "fast-deep-equal": { 110 | "version": "2.0.1", 111 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 112 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" 113 | }, 114 | "fast-json-stable-stringify": { 115 | "version": "2.0.0", 116 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 117 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 118 | }, 119 | "forever-agent": { 120 | "version": "0.6.1", 121 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 122 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 123 | }, 124 | "form-data": { 125 | "version": "2.3.3", 126 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 127 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 128 | "requires": { 129 | "asynckit": "^0.4.0", 130 | "combined-stream": "^1.0.6", 131 | "mime-types": "^2.1.12" 132 | } 133 | }, 134 | "getpass": { 135 | "version": "0.1.7", 136 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 137 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 138 | "requires": { 139 | "assert-plus": "^1.0.0" 140 | } 141 | }, 142 | "har-schema": { 143 | "version": "2.0.0", 144 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 145 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 146 | }, 147 | "har-validator": { 148 | "version": "5.1.3", 149 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 150 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 151 | "requires": { 152 | "ajv": "^6.5.5", 153 | "har-schema": "^2.0.0" 154 | } 155 | }, 156 | "http-signature": { 157 | "version": "1.2.0", 158 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 159 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 160 | "requires": { 161 | "assert-plus": "^1.0.0", 162 | "jsprim": "^1.2.2", 163 | "sshpk": "^1.7.0" 164 | } 165 | }, 166 | "is-typedarray": { 167 | "version": "1.0.0", 168 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 169 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 170 | }, 171 | "isstream": { 172 | "version": "0.1.2", 173 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 174 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 175 | }, 176 | "jsbn": { 177 | "version": "0.1.1", 178 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 179 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 180 | }, 181 | "json-schema": { 182 | "version": "0.2.3", 183 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 184 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 185 | }, 186 | "json-schema-traverse": { 187 | "version": "0.4.1", 188 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 189 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 190 | }, 191 | "json-stringify-safe": { 192 | "version": "5.0.1", 193 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 194 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 195 | }, 196 | "jsprim": { 197 | "version": "1.4.1", 198 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 199 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 200 | "requires": { 201 | "assert-plus": "1.0.0", 202 | "extsprintf": "1.3.0", 203 | "json-schema": "0.2.3", 204 | "verror": "1.10.0" 205 | } 206 | }, 207 | "mime": { 208 | "version": "1.6.0", 209 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 210 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 211 | }, 212 | "mime-db": { 213 | "version": "1.42.0", 214 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", 215 | "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" 216 | }, 217 | "mime-types": { 218 | "version": "2.1.25", 219 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", 220 | "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", 221 | "requires": { 222 | "mime-db": "1.42.0" 223 | } 224 | }, 225 | "oauth-sign": { 226 | "version": "0.9.0", 227 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 228 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 229 | }, 230 | "performance-now": { 231 | "version": "2.1.0", 232 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 233 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 234 | }, 235 | "psl": { 236 | "version": "1.5.0", 237 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.5.0.tgz", 238 | "integrity": "sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA==" 239 | }, 240 | "punycode": { 241 | "version": "2.1.1", 242 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 243 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 244 | }, 245 | "qs": { 246 | "version": "6.5.2", 247 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 248 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 249 | }, 250 | "request": { 251 | "version": "2.88.0", 252 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 253 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 254 | "requires": { 255 | "aws-sign2": "~0.7.0", 256 | "aws4": "^1.8.0", 257 | "caseless": "~0.12.0", 258 | "combined-stream": "~1.0.6", 259 | "extend": "~3.0.2", 260 | "forever-agent": "~0.6.1", 261 | "form-data": "~2.3.2", 262 | "har-validator": "~5.1.0", 263 | "http-signature": "~1.2.0", 264 | "is-typedarray": "~1.0.0", 265 | "isstream": "~0.1.2", 266 | "json-stringify-safe": "~5.0.1", 267 | "mime-types": "~2.1.19", 268 | "oauth-sign": "~0.9.0", 269 | "performance-now": "^2.1.0", 270 | "qs": "~6.5.2", 271 | "safe-buffer": "^5.1.2", 272 | "tough-cookie": "~2.4.3", 273 | "tunnel-agent": "^0.6.0", 274 | "uuid": "^3.3.2" 275 | } 276 | }, 277 | "safe-buffer": { 278 | "version": "5.2.0", 279 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 280 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 281 | }, 282 | "safer-buffer": { 283 | "version": "2.1.2", 284 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 285 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 286 | }, 287 | "sshpk": { 288 | "version": "1.16.1", 289 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 290 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 291 | "requires": { 292 | "asn1": "~0.2.3", 293 | "assert-plus": "^1.0.0", 294 | "bcrypt-pbkdf": "^1.0.0", 295 | "dashdash": "^1.12.0", 296 | "ecc-jsbn": "~0.1.1", 297 | "getpass": "^0.1.1", 298 | "jsbn": "~0.1.0", 299 | "safer-buffer": "^2.0.2", 300 | "tweetnacl": "~0.14.0" 301 | } 302 | }, 303 | "tough-cookie": { 304 | "version": "2.4.3", 305 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 306 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 307 | "requires": { 308 | "psl": "^1.1.24", 309 | "punycode": "^1.4.1" 310 | }, 311 | "dependencies": { 312 | "punycode": { 313 | "version": "1.4.1", 314 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 315 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 316 | } 317 | } 318 | }, 319 | "tunnel-agent": { 320 | "version": "0.6.0", 321 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 322 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 323 | "requires": { 324 | "safe-buffer": "^5.0.1" 325 | } 326 | }, 327 | "tweetnacl": { 328 | "version": "0.14.5", 329 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 330 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 331 | }, 332 | "twit": { 333 | "version": "2.2.11", 334 | "resolved": "https://registry.npmjs.org/twit/-/twit-2.2.11.tgz", 335 | "integrity": "sha512-BkdwvZGRVoUTcEBp0zuocuqfih4LB+kEFUWkWJOVBg6pAE9Ebv9vmsYTTrfXleZGf45Bj5H3A1/O9YhF2uSYNg==", 336 | "requires": { 337 | "bluebird": "^3.1.5", 338 | "mime": "^1.3.4", 339 | "request": "^2.68.0" 340 | } 341 | }, 342 | "uri-js": { 343 | "version": "4.2.2", 344 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 345 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 346 | "requires": { 347 | "punycode": "^2.1.0" 348 | } 349 | }, 350 | "uuid": { 351 | "version": "3.3.3", 352 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", 353 | "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" 354 | }, 355 | "verror": { 356 | "version": "1.10.0", 357 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 358 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 359 | "requires": { 360 | "assert-plus": "^1.0.0", 361 | "core-util-is": "1.0.2", 362 | "extsprintf": "^1.2.0" 363 | } 364 | } 365 | } 366 | } 367 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-bot", 3 | "version": "1.0.0", 4 | "description": "a simple bot that's a fan of javascript", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/Edmund1645/js-bot.git" 12 | }, 13 | "author": "Edmund Ekott", 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/Edmund1645/js-bot/issues" 17 | }, 18 | "homepage": "https://github.com/Edmund1645/js-bot#readme", 19 | "dependencies": { 20 | "twit": "^2.2.11" 21 | } 22 | } 23 | --------------------------------------------------------------------------------