├── CNAME
├── .gitignore
├── .env.example
├── middleware
└── checkAuth.js
├── router
├── logout.js
├── support.js
├── premium.js
├── login.js
├── invite.js
└── index.js
├── package.json
├── views
├── layout
│ ├── footer.ejs
│ ├── script.ejs
│ ├── head.ejs
│ └── navbar.ejs
└── pages
│ ├── premium.ejs
│ └── index.ejs
├── README.md
├── index.js
├── public
└── css
│ ├── main.css
│ └── premium.css
└── Images
└── undraw_Faq_re_31cw.svg
/CNAME:
--------------------------------------------------------------------------------
1 | fnrdev.me
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .env
3 | sessions
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | clientID=
2 | token=
3 | callback=http://localhost:3000/login
4 | secret=
5 | port=3000
6 | SCOPES=identify,guilds
7 | SUPPORT=probot
8 |
--------------------------------------------------------------------------------
/middleware/checkAuth.js:
--------------------------------------------------------------------------------
1 | function checkAuth(req, res, next) {
2 | if (req.isAuthenticated()) return next();
3 | res.redirect('/login')
4 | }
5 |
6 | module.exports = checkAuth;
--------------------------------------------------------------------------------
/router/logout.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | router.get('/', async (req, res) => {
5 | await req.logout();
6 | res.redirect('/')
7 | })
8 |
9 | module.exports = router;
--------------------------------------------------------------------------------
/router/support.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | router.get('/', (req, res) => {
5 | res.redirect(`https://discord.gg/${process.env.SUPPORT}`)
6 | })
7 |
8 | module.exports = router;
--------------------------------------------------------------------------------
/router/premium.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 | const checkAuth = require('../middleware/checkAuth')
4 |
5 | router.get('/', checkAuth, async(req, res) => {
6 | res.render('pages/premium')
7 | })
8 |
9 | module.exports = router;
--------------------------------------------------------------------------------
/router/login.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 | const passport = require('passport')
4 |
5 | router.get('/', passport.authenticate('discord', {
6 | failureRedirect: '/'
7 | }), (req, res) => {
8 | res.redirect('/')
9 | })
10 |
11 | module.exports = router;
--------------------------------------------------------------------------------
/router/invite.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | router.get('/', (req, res) => {
5 | let client = req.bot
6 | res.redirect(`https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot%20applications.commands`)
7 | })
8 |
9 | module.exports = router;
--------------------------------------------------------------------------------
/router/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | router.get('/', async (req, res) => {
5 | const client = req.bot;
6 | const fetchApplication = await client.application.fetch();
7 | res.render('pages/index', {
8 | description: fetchApplication.description || `I can\'t find about me in ${client.user.username} bot`
9 | })
10 | })
11 |
12 | module.exports = router;
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "npm i; node ."
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "colors": "^1.4.0",
14 | "discord.js": "^13.2.0",
15 | "dotenv": "^10.0.0",
16 | "ejs": "^2.6.1",
17 | "express": "^4.17.1",
18 | "express-session": "^1.17.2",
19 | "passport": "^0.4.1",
20 | "passport-discord": "^0.1.4",
21 | "session-file-store": "^1.5.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/views/layout/footer.ejs:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/views/layout/script.ejs:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Note: this project forked from [xCuzSkillz](https://github.com/xCuzSkillz) i just created server side
2 |
3 |
4 | ## Installation
5 |
6 | ```sh
7 | npm install
8 | ```
9 | ---
10 |
11 | ### You need to rename .env file
12 |
13 | - .env
14 | ```sh
15 | clientID=
16 | token=
17 | callback=http://localhost:3000/login
18 | secret=
19 | port=3000
20 | SCOPES=identify,guilds
21 | SUPPORT=pornhub
22 | ```
23 | ---
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/views/layout/head.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <% if (route.includes('premium')) { %>
9 |
10 | <% } %>
11 | <%= client.user.username %>
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/views/layout/navbar.ejs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | // import packages
2 | const express = require('express');
3 | const app = express();
4 | const Discord = require('discord.js');
5 | const client = new Discord.Client({ intents: ["GUILDS"] })
6 | app.set('view engine', 'ejs');
7 | app.use(express.urlencoded({ extended: true }));
8 | const passport = require('passport');
9 | const DiscordStrategy = require('passport-discord').Strategy;
10 | const session = require('express-session');
11 | const fileStore = require('session-file-store')(session);
12 | app.use(express.json());
13 | app.use(express.static('public'))
14 | require('dotenv').config();
15 | require('colors');
16 |
17 | // strategy for discord
18 | passport.use(new DiscordStrategy({
19 | clientID: process.env.clientID,
20 | clientSecret: process.env.secret,
21 | callbackURL: process.env.callback,
22 | scope: process.env.SCOPES.split(',')
23 | }, function(accessToken, refreshToken, profile, done) {
24 | process.nextTick(function() {
25 | return done(null, profile)
26 | })
27 | }))
28 |
29 | // setup session
30 | app.use(session({
31 | secret: 'fnr12345624',
32 | resave: false,
33 | saveUninitialized: false,
34 | store: new fileStore({
35 | logFn: () => true
36 | }),
37 | cookie: { maxAge: 3600000 * 24 * 30 }
38 | }));
39 |
40 | // serializeUser & deserializeUser
41 | app.use(passport.initialize());
42 | app.use(passport.session());
43 | passport.serializeUser(function(user, done) {
44 | done(null, user);
45 | });
46 | passport.deserializeUser(function(obj, done) {
47 | done(null, obj);
48 | });
49 |
50 | // locals
51 | app.use(async function(req, res, next) {
52 | let user;
53 | if (req.isAuthenticated()) {
54 | user = await client.users.fetch(req.user.id)
55 | }
56 | req.bot = client;
57 | res.locals.login = req.isAuthenticated();
58 | res.locals.client = client;
59 | res.locals.user = user;
60 | res.locals.loggedUser = req.user;
61 | res.locals.route = req.originalUrl;
62 | next();
63 | })
64 |
65 | // routes
66 | app.use('/', require('./router/index'))
67 | app.use('/invite', require('./router/invite'))
68 | app.use('/premium', require('./router/premium'))
69 | app.use('/login', require('./router/login'))
70 | app.use('/logout', require('./router/logout'))
71 | app.use('/support', require('./router/support'))
72 |
73 | // end of routes
74 |
75 | // start backend server
76 | app.listen(process.env.port, () => console.log(`App is ready in port ${process.env.port}`))
77 |
78 | client.on('ready', () => {
79 | console.log(`[Discord API] Logged in as ${client.user.username}`.cyan);
80 | })
81 |
82 | client.login(process.env.token);
--------------------------------------------------------------------------------
/public/css/main.css:
--------------------------------------------------------------------------------
1 | *{
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 | body{
7 | background-color: #0a0a19;
8 | color: #f7f7f7;
9 | font-family: 'Cairo', sans-serif;
10 | }
11 | .nav-c{
12 | position: relative;
13 | top: 1.1px;
14 | left: 12px;
15 | }
16 | .navbar-brand{
17 | text-transform: uppercase;
18 | font-size: 1.5rem;
19 | }
20 | .dropdown-toggle{
21 | background-color: #161625;
22 | }
23 | .dropdown-toggle:focus, .dropdown-toggle:active{
24 | outline: none;
25 | border: none;
26 | box-shadow: none;
27 | }
28 | .dropdown-item{
29 | background-color: #f04747;
30 | border-radius: 5px;
31 | width: 90%;
32 | margin-left: 5%;
33 | }
34 | .dr-tg{
35 | background-color: transparent;
36 | border: none;
37 | }
38 | .dr-tg:focus, .dr-tg:hover, .dr-tg:active{
39 | background-color: transparent;
40 | box-shadow: none;
41 | }
42 | .btn-custom1{
43 | background-color: #5e5ac9;
44 | color: #f7f7f7;
45 | padding: 10px 18px;
46 | border: none;
47 | border-radius: 4px;
48 | display: inline-block;
49 | font-size: 16px;
50 | }
51 | .dropdown-menu{
52 | background-color: #161625;
53 | }
54 | .btn-custom:hover{
55 | color: #bbbbbb;
56 | }
57 | .dropdown-item:hover{
58 | background-color: #1c1c2e;
59 | }
60 | .br-cs{
61 | width: 10px;
62 | height: 30px;
63 | }
64 | .cont{
65 | margin-top: 12%;
66 | }
67 | .col-cus{
68 | color: #bbbbbb;
69 | }
70 | .par1{
71 | font-weight: 700;
72 | font-size: 2em;
73 | }
74 | .btn-invite{
75 | background-color: #5e5ac9;
76 | color: #f7f7f7;
77 | font-weight: 500;
78 | padding: 10px 20px;
79 | }
80 | .btn-outline-prem{
81 | border: 1px solid #bbbbbb;
82 | padding: 10px 20px;
83 | color: #f7f7f7;
84 | margin-left: .5em;
85 | }
86 |
87 | .btn-invite:hover, .btn-outline-prem:hover{
88 | color: #f7f7f7;
89 | }
90 | .btn-outline-prem:hover{
91 | background-color: #dfdfdf;
92 | color: #0a0a19;
93 | text-decoration: underline;
94 | }
95 | .logo-main{
96 | width: 21rem;
97 | height: 21rem;
98 | position: relative;
99 | bottom: 5rem;
100 | }
101 | .about-title{
102 | color: #ebebeb;
103 | letter-spacing: 1px;
104 | text-transform: uppercase;
105 | }
106 |
107 | .par-info{
108 | background-color: #161625;
109 | position: relative;
110 | top: 5px;
111 | right: 4px;
112 | padding: 9px 14px;
113 | border-radius: 8px;
114 | border: 2px solid #5e5ac9;
115 | }
116 |
117 | .accordion-collapse{
118 | background-color: #161625;
119 | outline: none;
120 | }
121 | footer{
122 | background-color: #161625;
123 | height: 9vh;
124 | padding-top: 2rem;
125 | }
126 | footer p{
127 | font-weight: 700;
128 | }
129 | .wave-footer{
130 | position: relative;
131 | top: 3rem;
132 | }
133 |
134 | /* width */
135 | ::-webkit-scrollbar {
136 | width: 10px;
137 | }
138 |
139 | /* Track */
140 | ::-webkit-scrollbar-track {
141 | background: #1c1c2e;
142 | }
143 |
144 | /* Handle */
145 | ::-webkit-scrollbar-thumb {
146 | background: #5e5ac9;
147 | border-radius: 30px;
148 | }
149 |
150 | /* Handle on hover */
151 | ::-webkit-scrollbar-thumb:hover {
152 | background: #4b48a8;
153 | }
154 | @media screen and (max-width: 700px){
155 | .logo-main{
156 | width: 16rem;
157 | height: 16rem;
158 | position: relative;
159 | bottom: 1rem;
160 | margin-top: 6%;
161 | margin-right: 22%;
162 | }
163 | }
--------------------------------------------------------------------------------
/public/css/premium.css:
--------------------------------------------------------------------------------
1 |
2 | .col-prem{
3 | background-color: #161625;
4 | margin: 1rem;
5 | border-radius: 5px;
6 | padding: 18px 22px;
7 | border: 2px solid #5e5ac9;
8 | transition: 0.2s all;
9 | }
10 | .col-prem:hover{
11 | background-color: #5e5ac9;
12 | transition: 0.2s all;
13 | cursor: pointer;
14 | transform: translateY(-10px);
15 | }
16 | .num-count{
17 | font-size: 22px;
18 | color: #bbbbbb;
19 | }
20 | .fa-crown, .fa-money-bill-wave, .fa-hourglass-end{
21 | font-size: 3rem;
22 | position: relative;
23 | top: 3px;
24 | }
25 | .fa-crown{
26 | color: rgb(224, 203, 84);
27 | }
28 | .fa-money-bill-wave{
29 | color: #43b581;
30 | }
31 | .fa-hourglass-end{
32 | color: #f04747;
33 | }
34 | .col-ic{
35 | margin-left: 10%;
36 | }
37 | .card{
38 | background-color: transparent;
39 | }
40 | .card-head{
41 | padding: 16px 18px;
42 | background-color: #161625;
43 | border-top-left-radius: 10px;
44 | border-top-right-radius: 10px;
45 | }
46 | .card-body{
47 | background-color: #242438;
48 | border-bottom-left-radius: 10px;
49 | border-bottom-right-radius: 10px;
50 | }
51 | .btn-add{
52 | border: 2px solid #43b581;
53 | color: #fff;
54 | padding: 8px 22px;
55 | border-radius: 30px;
56 | }
57 | .btn-add:hover{
58 | background-color: #43b581;
59 | color: #fff;
60 | }
61 | .main-bot-sec{
62 | background-color: #161625;
63 | padding: 12px;
64 | border-radius: 5px;
65 | margin-bottom: 1%;
66 | }
67 | .typorgraphy-prem{
68 | margin-left: 2%;
69 | }
70 | .bot-img{
71 | position: relative;
72 | bottom: 11px;
73 | }
74 | .bot-name{
75 | font-size: 22px;
76 | letter-spacing: 1px;
77 | }
78 | .bot-tag{
79 | color: #c0c0c0;
80 | font-size: 18px;
81 | }
82 | .exp-time{
83 | font-size: 16px;
84 | color: #bbbbbb;
85 | position: relative;
86 | top: 7px;
87 | }
88 | .btn-invite-prem{
89 | background-color: #5e5ac9;
90 | color: #f7f7f7;
91 | font-weight: 500;
92 | padding: 9px 18px;
93 | position: relative;
94 | top: 10px;
95 | margin-right: 3%;
96 | border: 2px solid #5e5ac9;
97 | }
98 | .btn-invite-prem:hover{
99 | color: #fff;
100 | background-color: transparent;
101 | border: 2px solid #5e5ac9;
102 | }
103 | #overlay {
104 | position: fixed;
105 | display: none;
106 | width: 100%;
107 | height: 100%;
108 | top: 0;
109 | left: 0;
110 | right: 0;
111 | bottom: 0;
112 | background-color: rgba(0,0,0,0.5);
113 | z-index: 2;
114 | cursor: pointer;
115 | }
116 | .credits-charge{
117 | width: 40%;
118 | margin: 0px auto;
119 | margin-top: 10%;
120 | }
121 | .leave-overlay{
122 | color: #f04747;
123 | font-size: 24px;
124 | }
125 | .btn-close{
126 | color: #f04747;
127 | font-size: 22px;
128 | }
129 |
130 | .chose-am-t{
131 | position: relative;
132 | top: 12px;
133 | }
134 | .btn-mount{
135 | border: 2px solid #5e5ac9;
136 | font-size: 18px;
137 | margin-left: 2%;
138 | margin-bottom: 2%;
139 | }
140 | .btn-mount:hover{
141 | background-color: #5e5ac9;
142 | }
143 | @media screen and (max-width: 375px){
144 | .bot-name{
145 | font-size: 14px;
146 | }
147 | .bot-tag, .exp-time{
148 | font-size: 14px;
149 | }
150 | .btn-invite-prem{
151 | padding: 9px 5px;
152 | top: 3px;
153 | left: 7px;
154 | font-size: 15px;
155 | }
156 | .bot-img{
157 | width: 50px;
158 | height: 50px;
159 | }
160 | .main-bot-sec{
161 | width: 110%;
162 | position: relative;
163 | right: 16px;
164 | }
165 | }
166 | @media screen and (max-width: 411px){
167 | .bot-name{
168 | font-size: 14px;
169 | }
170 | .bot-tag, .exp-time{
171 | font-size: 14px;
172 | }
173 | .btn-invite-prem{
174 | padding: 9px 5px;
175 | top: 3px;
176 | left: 7px;
177 | font-size: 15px;
178 | }
179 | .bot-img{
180 | width: 50px;
181 | height: 50px;
182 | }
183 | .main-bot-sec{
184 | width: 109%;
185 | position: relative;
186 | right: 15px;
187 | }
188 | .credits-charge{
189 | width: 90%;
190 | }
191 | }
--------------------------------------------------------------------------------
/Images/undraw_Faq_re_31cw.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/views/pages/premium.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 | <% include ../layout/head %>
4 |
5 | <% include ../layout/navbar %>
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Bots Owned
15 | 14
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
Bots Expired
26 | 3
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
Your Credits
37 | 64$ USD
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Bots Owned
46 | Add Bot
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | ServerBot#4433
55 | Ends on 27 days
56 |
57 |
58 |
Invite Bot
59 |
60 |
61 |
62 |
63 |
64 | ServerBot#4433
65 | Ends on 27 days
66 |
67 |
68 |
Invite Bot
69 |
70 |
71 |
72 |
73 |
74 | ServerBot#4433
75 | Ends on 27 days
76 |
77 |
78 |
Invite Bot
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 | Bots Expired
87 | Renew All
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 | ServerBot#4433
96 | Expired since 12 days
97 |
98 |
99 |
Renew Bot
100 |
101 |
102 |
103 |
104 |
105 | ServerBot#4433
106 | Expired since 7 days
107 |
108 |
109 |
Renew Bot
110 |
111 |
112 |
113 |
114 |
115 | ServerBot#4433
116 | Expired since 7days
117 |
118 |
119 |
Renew Bot
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 | Choose Amount (Will be added to your balance)
129 |
130 |
131 |
132 |
133 |
134 |
135 | 3$
136 | 5$
137 | 8$
138 | 10$
139 | 15$
140 | 20$
141 | 25$
142 | 30$
143 |
144 |
145 |
146 | <% include ../layout/footer %>
147 |
148 | <% include ../layout/script %>
149 |
150 |
--------------------------------------------------------------------------------
/views/pages/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 | <% include ../layout/head %>
4 |
5 | <% include ../layout/navbar %>
6 |
7 |
8 |
9 |
Listen to your favourite music with your friends 😉
10 |
11 | <%= client.user.username %> offer the best qullity to listen to your music with 24/7 uptime
12 |
13 | Invite <%= client.user.username %> to your server now!
14 |
15 |
16 | Invite to Discord
17 |
18 |
19 | Buy Premium
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
About Us
32 |
33 | <%= description %>
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
All Commands
44 |
45 |
46 |
51 |
52 |
53 |
Explan:
54 |
55 | Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
56 | scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic
57 |
58 |
Usage:
59 |
60 | #play helloWorld [Args]
61 |
62 |
63 |
64 |
65 |
66 |
71 |
72 |
73 |
Explan:
74 |
75 | Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
76 | scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic
77 |
78 |
Usage:
79 |
80 | #play helloWorld [Args]
81 |
82 |
83 |
84 |
85 |
86 |
91 |
92 |
93 |
Explan:
94 |
95 | Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
96 | scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic
97 |
98 |
Usage:
99 |
100 | #play helloWorld [Args]
101 |
102 |
103 |
104 |
105 |
106 |
111 |
112 |
113 |
Explan:
114 |
115 | Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
116 | scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic
117 |
118 |
Usage:
119 |
120 | #play helloWorld [Args]
121 |
122 |
123 |
124 |
125 |
126 |
131 |
132 |
133 |
Explan:
134 |
135 | Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
136 | scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic
137 |
138 |
Usage:
139 |
140 | #play helloWorld [Args]
141 |
142 |
143 |
144 |
145 |
146 |
147 | <% include ../layout/footer %>
148 |
149 | <% include ../layout/script %>
150 |
151 |
--------------------------------------------------------------------------------