├── .github
└── workflows
│ └── nightly-bump.yml
├── .gitignore
├── .nvmrc
├── README.md
├── package.json
└── src
├── date.txt
└── index.js
/.github/workflows/nightly-bump.yml:
--------------------------------------------------------------------------------
1 | name: 'Nightly Bump'
2 |
3 | on:
4 | workflow_dispatch:
5 | schedule:
6 | - cron: '0 1 * * *' # every night at 1 am UTC
7 |
8 | jobs:
9 | bump:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout main branch
13 | uses: actions/checkout@v3
14 | # create a file at src/date.txt with the current date
15 | - name: Create date file
16 | run: |
17 | mkdir -p src
18 | echo $(date) > src/date.txt
19 | # commit the file
20 | - name: Commit date file
21 | run: |
22 | git config --local user.name "GitHub Actions"
23 | git config --local user.email "actions@github.com"
24 | git add src/date.txt
25 | git commit -m "Update date.txt"
26 | # push the commit
27 | - name: Push commit
28 | uses: ad-m/github-push-action@master
29 | with:
30 | github_token: ${{ secrets.GITHUB_TOKEN }}
31 | branch: ${{ github.ref }}
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | v18/*
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | YouTube Play Generator Bot is a free software that generates plays on your YouTube videos
16 |
17 |
18 | # 🦄 YouTube Bot
19 | ## 💻 Installation
20 | ### Direct link
21 | [](https://somiibo.com/download?download=windows)
22 | [](https://somiibo.com/download?download=macos)
23 | [](https://somiibo.com/download?download=linux)
24 | [](https://somiibo.com/download?download=null)
25 |
26 | ### Command line
27 | Clone this repo then run the following commands:
28 | ```shell
29 | cd
30 | npm install
31 | npm start
32 | ```
33 |
34 | ## 🎉 Features
35 | - Generate views on your YouTube videos
36 | - Proxy scraper automatically gets fresh proxies 24/7
37 | - Choose target countries
38 | - User agents randomized (or set your own!)
39 | - HTTP Referrer randomized (or set your own!)
40 |
41 | ## 🙋♂️ Want to contribute?
42 | Want to contribute? Great! All contributions are welcome, from code to documentation to graphics to design suggestions to bug reports.
43 |
44 | [Join our Discord server](https://somiibo.com/discord) to participate
45 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "somiibo-downloader",
3 | "version": "1.0.0",
4 | "description": "Download Somiibo, a free social media automation platform that organically grows your online presence and gets you more followers.",
5 | "main": "src/index.js",
6 | "scripts": {
7 | "start": "node -e \"require('app-downloader')()\""
8 | },
9 | "engines": {
10 | "node": ">=18"
11 | },
12 | "downloads": {
13 | "darwin": "https://github.com/somiibo/download-server/releases/download/installer/Somiibo.dmg",
14 | "win32": "https://github.com/somiibo/download-server/releases/download/installer/Somiibo-Setup.exe",
15 | "linux": "https://github.com/somiibo/download-server/releases/download/installer/Somiibo_amd64.deb"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "git+https://github.com/somiibo/download-server.git"
20 | },
21 | "keywords": [
22 | "management",
23 | "backend",
24 | "frontend",
25 | "productivity"
26 | ],
27 | "author": "Somiibo",
28 | "license": "ISC",
29 | "bugs": {
30 | "url": "https://github.com/somiibo/somiibo-microservice-template/issues"
31 | },
32 | "homepage": "https://somiibo.com",
33 | "dependencies": {
34 | "app-downloader": "^1.0.0"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/date.txt:
--------------------------------------------------------------------------------
1 | Fri Jun 6 02:44:41 UTC 2025
2 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | // Modules
2 | const os = require('os');
3 | const fs = require('fs-jetpack');
4 | const path = require('path');
5 | const fetch = require('wonderful-fetch');
6 | const downloads = require('downloads-folder');
7 | const powertools = require('node-powertools');
8 |
9 | // Main
10 | module.exports = async function () {
11 | const interval = setInterval(() => {
12 | log('Still downloading, please be patient! :)');
13 | }, 3000);
14 |
15 | try {
16 | // Clear
17 | clear();
18 |
19 | // Download
20 | await download();
21 |
22 | // Launch
23 | launch();
24 |
25 | return
26 | } catch (e) {
27 | error('Failed to download:', e);
28 | error('Ensure you are using the right Node.js version');
29 | error('Alternatively, download the app manually from:', getURL());
30 | } finally {
31 | clearInterval(interval);
32 | }
33 | };
34 |
35 | if (require.main === module) {
36 | module.exports();
37 | }
38 |
39 | function clear() {
40 | const location = getDownloadPath();
41 |
42 | log(`Clearing ${location}`)
43 |
44 | fs.remove(location);
45 | }
46 |
47 | function download(location) {
48 | return new Promise(async function(resolve, reject) {
49 | const location = getDownloadPath();
50 | const url = getURL();
51 |
52 | log(`Downloading app to ${location} from ${url}`);
53 |
54 | // Process
55 | const res = await fetch(url);
56 | const fileStream = fs.createWriteStream(location);
57 |
58 | await new Promise((resolve, reject) => {
59 | res.body.pipe(fileStream);
60 | res.body.on('error', reject);
61 |
62 | fileStream.on('finish', resolve);
63 | })
64 | .then((r) => {
65 | log('Download finished!');
66 | })
67 | .catch((e) => {
68 | error('Download failed!', e);
69 | })
70 |
71 | return resolve();
72 | });
73 | }
74 |
75 | function getDownloadPath() {
76 | const url = getURL();
77 |
78 | return path.join(downloads(), url.split('/').slice(-1)[0]);
79 | }
80 |
81 | function getURL() {
82 | const name = os.type();
83 |
84 | if (name === 'Darwin') {
85 | return 'https://github.com/somiibo/download-server/releases/download/installer/Somiibo.dmg'
86 | } else if (name === 'Windows_NT') {
87 | return 'https://github.com/somiibo/download-server/releases/download/installer/Somiibo-Setup.exe'
88 | } else {
89 | return 'https://github.com/somiibo/download-server/releases/download/installer/Somiibo_amd64.deb'
90 | }
91 | }
92 |
93 | function launch() {
94 | const location = getDownloadPath();
95 | const name = os.type();
96 |
97 | log(`Launching app at ${location}`)
98 |
99 | try {
100 | if (name === 'Darwin') {
101 | powertools.execute(`open "${location}"`)
102 | .then(() => {
103 | log('Drag the app to your Applications folder to install it');
104 | })
105 | } else if (name === 'Windows_NT') {
106 | powertools.execute(`"${location}"`)
107 | .then(() => {
108 |
109 | })
110 | } else {
111 | powertools.execute(`sudo apt install "${location}"`)
112 | .then(() => {
113 | powertools.execute(`restart-manager`).catch(e => {console.error(e)})
114 | })
115 | }
116 | } catch (e) {
117 | error('Application failed to execute:', e);
118 | console.log('\n\n\n')
119 | log(`Please launch the app manually: ${location}`);
120 | }
121 | }
122 |
123 | function log() {
124 | console.log(`[${new Date().toLocaleTimeString()}]`, ...arguments)
125 | }
126 |
127 | function error() {
128 | console.error(`[${new Date().toLocaleTimeString()}]`, ...arguments)
129 | }
130 |
--------------------------------------------------------------------------------