├── alertedChannels.json
├── web
├── .gitignore
├── server
│ ├── .gitignore
│ ├── package.json
│ └── index.js
├── setup.sh
├── README.md
├── client
│ ├── package.json
│ ├── .gitignore
│ ├── index.html
│ ├── public
│ │ └── vite.svg
│ ├── main.js
│ └── style.css
└── package.json
├── .gitattributes
├── spicy-logo.png
├── assest
├── gifs
│ └── SpicyFlix.gif
└── images
│ └── banner.png
├── settings
├── models
│ ├── Profile.js
│ ├── GProfile.js
│ ├── AutoLeftRight.js
│ ├── AutoNudeSender.js
│ ├── AutoFeeds.js
│ ├── AutoWebhookSender.js
│ ├── Redeem.js
│ ├── GRedeem.js
│ ├── Premium.js
│ └── GPremium.js
└── config.js
├── events
├── client
│ ├── shardError.js
│ ├── shardReconnected.js
│ ├── shardDisconnect.js
│ ├── reconnecting.js
│ ├── error.js
│ ├── warn.js
│ ├── shardResume.js
│ ├── rateLimit.js
│ ├── disconnect.js
│ ├── shardReady.js
│ └── ready.js
└── guild
│ ├── guildDelete.js
│ ├── guildCreate.js
│ └── interactionCreate.js
├── Functions
├── others
│ ├── Functionsrunner.js
│ ├── pinporn_requester.js
│ ├── one_requester.js
│ ├── pikped_requester.js
│ ├── onlytik_requester.js
│ ├── pinporn_categories.js
│ ├── FiqFuq_requester.js
│ ├── waptap_tiktok_categories.js
│ └── randomsub.js
├── reddit_cmd_subs
│ ├── Blowjob.js
│ ├── Hentai.js
│ ├── Rule34.js
│ ├── Anal.js
│ ├── Bdsm.js
│ ├── Milf.js
│ ├── Asian.js
│ ├── Amateur.js
│ ├── Celebrity.js
│ ├── Gay.js
│ ├── Feet.js
│ ├── Teens.js
│ ├── Pussy.js
│ ├── Cum.js
│ ├── Boobs.js
│ ├── Public.js
│ ├── Thick.js
│ ├── Ass.js
│ └── Gonewild.js
├── defultErloading.js
├── defaultErrshow.js
├── defaultPremiumer.js
├── defaultNsfwEmbed.js
├── BotLists
│ ├── hasvoted.botlist.me.js
│ └── botlist.me.js
├── AutoRandomSavedSender.js
├── WebhookRedditSender.js
├── OnlyTikApi.js
├── PinPornSender.js
├── Tiktok_f_auto.js
├── waptap_tiktok_sender.js
├── LeftandRightSender.js
├── AutoVideoSender.js
├── FiqFuqAutoSender.js
├── PremiumXfollowPoster.js
└── AutoFeedsSender.js
├── handlers
├── PremiumReader.js
├── loadDatabase.js
├── Database
│ ├── loadDatabase.js
│ ├── loadPremium.js
│ └── loadGuildPremium.js
├── loadEvent.js
├── Setup
│ └── PremiumRunnder.js
└── loadCommand.js
├── commands
├── Neko
│ ├── Yaoi.js
│ ├── 4k.js
│ ├── Neko.js
│ ├── Paizuri.js
│ └── Tentacle.js
├── Porn
│ ├── Eboy.js
│ ├── Dildo.js
│ ├── Gay.js
│ ├── Milf.js
│ ├── Anal.js
│ ├── Feet.js
│ ├── Blowjob.js
│ ├── Lesbian.js
│ ├── Cuckold.js
│ ├── Homemade.js
│ ├── Asian.js
│ ├── Boobs.js
│ ├── Onlyfans.js
│ ├── Tiktok.js
│ ├── Porn.js
│ └── Search.js
├── General
│ ├── Ping.js
│ ├── Invite.js
│ ├── Support.js
│ ├── Help.js
│ └── Stats.js
├── Premium
│ ├── Remove.js
│ ├── GuildProfile.js
│ ├── Profile.js
│ ├── GuildRedeem.js
│ ├── Redeem.js
│ ├── Generate.js
│ └── GuildGenerate.js
├── Configs
│ ├── AutoVideoRemove.js
│ ├── RemoveAutoreddit.js
│ ├── SetAutoNude.js
│ └── SetAutoReddit.js
├── PremiumPosters
│ └── setleft-right.js
└── Reddit
│ ├── Cum.js
│ ├── Ass.js
│ ├── Gay.js
│ ├── Anal.js
│ ├── Feet.js
│ └── Milf.js
├── index.js
├── .env.spicyflix
├── package.json
├── README.md
├── spicy-flix.js
└── tos.md
/alertedChannels.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/web/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/web/server/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/spicy-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/soul-strings/spicyflix/HEAD/spicy-logo.png
--------------------------------------------------------------------------------
/assest/gifs/SpicyFlix.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/soul-strings/spicyflix/HEAD/assest/gifs/SpicyFlix.gif
--------------------------------------------------------------------------------
/assest/images/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/soul-strings/spicyflix/HEAD/assest/images/banner.png
--------------------------------------------------------------------------------
/web/setup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | npm i
4 | cd server || exit
5 | npm i
6 | cd ../client || exit
7 | npm i
8 | cd ..
9 |
--------------------------------------------------------------------------------
/settings/models/Profile.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 |
3 | const Create = mongoose.Schema({
4 | userId: String,
5 | })
6 | module.exports = mongoose.model('Profiles', Create)
--------------------------------------------------------------------------------
/settings/models/GProfile.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 |
3 | const Create = mongoose.Schema({
4 | userId: String,
5 | })
6 | module.exports = mongoose.model('GuildProfiles', Create)
--------------------------------------------------------------------------------
/events/client/shardError.js:
--------------------------------------------------------------------------------
1 | const { red, white } = require("chalk");
2 |
3 | module.exports = async (client, error, id) => {
4 | console.log(white('[') + red('ERROR') + white('] ') + red('Shard ') + white(id) + red(' Shard Errored!'));
5 | }
--------------------------------------------------------------------------------
/events/client/shardReconnected.js:
--------------------------------------------------------------------------------
1 | const { white, yellow } = require("chalk");
2 |
3 | module.exports = async (client, id) => {
4 | console.log(white('[') + yellow('WARN') + white('] ') + yellow('Shard ') + white(id) + yellow(' Shard Reconnected!'));
5 | }
--------------------------------------------------------------------------------
/Functions/others/Functionsrunner.js:
--------------------------------------------------------------------------------
1 | const functions_runner = (functions) => {
2 | const ri = Math.floor(Math.random() * functions.length);
3 | return functions[ri];
4 | }
5 |
6 | module.exports = {
7 | functions_runner,
8 | };
9 | //dont remove this :)
--------------------------------------------------------------------------------
/events/client/shardDisconnect.js:
--------------------------------------------------------------------------------
1 | const { yellow, white } = require("chalk");
2 |
3 | module.exports = async (client, error, id) => {
4 | console.log(white('[') + yellow('WARN') + white('] ') + yellow('Shard ') + white(id) + yellow(' Shard Disconnected!'));
5 | }
--------------------------------------------------------------------------------
/settings/models/AutoLeftRight.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const Spicynude = new mongoose.Schema({
4 | guildId: String,
5 | channelId: String,
6 | webhook: String,
7 | });
8 |
9 | module.exports = mongoose.model('leftorright', Spicynude);
--------------------------------------------------------------------------------
/settings/models/AutoNudeSender.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const Spicynude = new mongoose.Schema({
4 | guildId: String,
5 | channelId: String,
6 | webhook: String,
7 | });
8 |
9 | module.exports = mongoose.model('Spicynude', Spicynude);
--------------------------------------------------------------------------------
/events/client/reconnecting.js:
--------------------------------------------------------------------------------
1 | const { white, yellow } = require('chalk');
2 |
3 | module.exports = async (client) => {
4 | console.log(white('[') + yellow('WARN') + white('] ') + yellow('Reconnected ') + white(`${client.user.tag} (${client.user.id})`) + yellow(' '));
5 | };
6 |
--------------------------------------------------------------------------------
/handlers/PremiumReader.js:
--------------------------------------------------------------------------------
1 | const { white, green } = require("chalk");
2 |
3 | module.exports = (client) => {
4 | require("./Setup/PremiumRunnder.js")(client);
5 | console.log(white('[') + green('INFO') + white('] ') + green('Premium Setup ') + white('Events') + green(' Loaded!'));
6 | };
--------------------------------------------------------------------------------
/settings/models/AutoFeeds.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const Feeds = new mongoose.Schema({
4 | guildId: String,
5 | channelId: String,
6 | webhook: String,
7 | contenttype: String,
8 | });
9 |
10 | module.exports = mongoose.model('autofeed', Feeds);
--------------------------------------------------------------------------------
/settings/models/AutoWebhookSender.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const Spicyautowebhook = new mongoose.Schema({
4 | guildId: String,
5 | channelId: String,
6 | webhook: String,
7 | });
8 |
9 | module.exports = mongoose.model('Spicyautowebhook', Spicyautowebhook);
--------------------------------------------------------------------------------
/commands/Neko/Yaoi.js:
--------------------------------------------------------------------------------
1 | const { neko_yaoi } = require("../../Functions/porn_cmd/requester")
2 | module.exports = {
3 | name: ["yaoi"],
4 | description: "get random yaoi porn image",
5 | run: async (interaction, client, user, language) => {
6 | await neko_yaoi(interaction, client)
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/commands/Neko/4k.js:
--------------------------------------------------------------------------------
1 | const { neko_4k } = require("../../Functions/porn_cmd/requester")
2 |
3 | module.exports = {
4 | name: ["4k"],
5 | description: "get random 4k porn image",
6 | run: async (interaction, client, user, language) => {
7 | await neko_4k(interaction, client)
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/commands/Neko/Neko.js:
--------------------------------------------------------------------------------
1 | const { neko_nekoa } = require("../../Functions/porn_cmd/requester")
2 | module.exports = {
3 | name: ["neko"],
4 | description: "get random neko porn image",
5 | run: async (interaction, client, user, language) => {
6 | await neko_nekoa(interaction, client)
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/web/README.md:
--------------------------------------------------------------------------------
1 | # spicylixweb
2 |
3 | Web client for [spicylix](https://github.com/soul-strings/spicyflix)
4 |
5 | ## installation
6 |
7 | ```bash
8 | ./setup.sh
9 | ```
10 |
11 | ## usage
12 |
13 | ```bash
14 | npm start
15 | ```
16 |
17 | > special thanks to [@soul-strings](https://github.com/soul-strings)
18 |
--------------------------------------------------------------------------------
/commands/Neko/Paizuri.js:
--------------------------------------------------------------------------------
1 | const { neko_paizuri } = require("../../Functions/porn_cmd/requester")
2 | module.exports = {
3 | name: ["paizuri"],
4 | description: "get random paizuri porn image",
5 | run: async (interaction, client, user, language) => {
6 | await neko_paizuri(interaction, client)
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/commands/Neko/Tentacle.js:
--------------------------------------------------------------------------------
1 | const { neko_tentacle } = require("../../Functions/porn_cmd/requester")
2 | module.exports = {
3 | name: ["tentacle"],
4 | description: "get random tentacle porn image",
5 | run: async (interaction, client, user, language) => {
6 | await neko_tentacle(interaction, client)
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Blowjob.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "blowjobs",
3 | ]
4 |
5 | function get_res() {
6 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
7 |
8 | const randomChoice = randomsubredditGet[randomIndex];
9 | return randomChoice
10 | }
11 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Hentai.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "hentai",
3 | ]
4 |
5 | function get_res() {
6 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
7 |
8 | const randomChoice = randomsubredditGet[randomIndex];
9 | return randomChoice
10 | }
11 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Rule34.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "rule34"
3 | ]
4 |
5 | function get_res() {
6 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
7 |
8 | const randomChoice = randomsubredditGet[randomIndex];
9 | return randomChoice
10 | }
11 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Anal.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "anal",
3 | "analgw",
4 | ]
5 |
6 | function get_res() {
7 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
8 |
9 | const randomChoice = randomsubredditGet[randomIndex];
10 | return randomChoice
11 | }
12 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Bdsm.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "bdsm",
3 | "femdom",
4 | ]
5 |
6 | function get_res() {
7 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
8 |
9 | const randomChoice = randomsubredditGet[randomIndex];
10 | return randomChoice
11 | }
12 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Milf.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "milf",
3 | "realmoms",
4 | ]
5 |
6 | function get_res() {
7 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
8 |
9 | const randomChoice = randomsubredditGet[randomIndex];
10 | return randomChoice
11 | }
12 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Asian.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "AsianHotties",
3 | "AsianNSFW",
4 | ]
5 |
6 | function get_res() {
7 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
8 |
9 | const randomChoice = randomsubredditGet[randomIndex];
10 | return randomChoice
11 | }
12 | module.exports = get_res;
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const MainClient = require("./spicy-flix.js");
2 | const client = new MainClient();
3 |
4 | client.connect()
5 | .then(() => {
6 | console.log(`Logged in as ${client.user.tag}!...`);
7 | console.log(`Total shards: ${client.count} | id: ${client.id}`);
8 | })
9 | .catch(console.error);
10 |
11 | module.exports = client;
12 |
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Amateur.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "realgirls",
3 | "amateur",
4 | "homemadexxx",
5 | ]
6 |
7 | function get_res() {
8 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
9 |
10 | const randomChoice = randomsubredditGet[randomIndex];
11 | return randomChoice
12 | }
13 | module.exports = get_res;
--------------------------------------------------------------------------------
/web/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "spicyflixweb",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "devDependencies": {
12 | "vite": "^5.4.1"
13 | },
14 | "dependencies": {
15 | "axios": "^1.7.7"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/web/client/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Celebrity.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "extramile",
3 | "onoffcelebs",
4 | "celebswithbigtits",
5 | ]
6 |
7 | function get_res() {
8 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
9 |
10 | const randomChoice = randomsubredditGet[randomIndex];
11 | return randomChoice
12 | }
13 | module.exports = get_res;
--------------------------------------------------------------------------------
/handlers/loadDatabase.js:
--------------------------------------------------------------------------------
1 | const { white, green } = require("chalk");
2 |
3 | module.exports = (client) => {
4 | require("./Database/loadDatabase.js")(client);
5 | require("./Database/loadPremium.js")(client);
6 | require("./Database/loadGuildPremium.js")(client)
7 | console.log(white('[') + green('INFO') + white('] ') + green('✅ Database ') + white('Events') + green(' Loaded!'));
8 | };
--------------------------------------------------------------------------------
/settings/models/Redeem.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 |
3 | const CreateRedeem = mongoose.Schema({
4 | code: {
5 | type: String,
6 | default: null
7 | },
8 | expiresAt: {
9 | type: Number,
10 | default: null
11 | },
12 | plan: {
13 | type: String,
14 | default: null
15 | }
16 | })
17 |
18 | module.exports = mongoose.model('Redeem', CreateRedeem)
--------------------------------------------------------------------------------
/web/client/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/settings/models/GRedeem.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 |
3 | const CreateRedeem = mongoose.Schema({
4 | code: {
5 | type: String,
6 | default: null
7 | },
8 | expiresAt: {
9 | type: Number,
10 | default: null
11 | },
12 | plan: {
13 | type: String,
14 | default: null
15 | }
16 | })
17 |
18 | module.exports = mongoose.model('GuildRedeem', CreateRedeem)
--------------------------------------------------------------------------------
/web/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "scripts": {
6 | "test": "echo \"Error: no test specified\" && exit 1",
7 | "dev": "node --watch ."
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "description": "",
13 | "dependencies": {
14 | "axios": "^1.7.7",
15 | "cors": "^2.8.5",
16 | "express": "^4.19.2"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/events/client/error.js:
--------------------------------------------------------------------------------
1 | const { white, red } = require('chalk');
2 | const { WebhookClient } = require('discord.js')
3 | module.exports = async (client, error) => {
4 | console.log(white('[') + red('WARN') + white('] ') + red('Errored ') + white(`${client.user.tag} (${client.user.id}) ${error}`) + red(' '));
5 |
6 | const web = new WebhookClient({ url: client.er_webhook });
7 | web.send({
8 | content: `${error}`
9 | });
10 | };
11 |
--------------------------------------------------------------------------------
/events/client/warn.js:
--------------------------------------------------------------------------------
1 | const { white, yellow } = require('chalk');
2 | const { WebhookClient } = require('discord.js');
3 |
4 | module.exports = async (client) => {
5 | console.log(white('[') + yellow('WARN') + white('] ') + yellow('Warned ') + white(`${client.user.tag} (${client.user.id})`) + yellow(' '));
6 | const web = new WebhookClient({ url: client.er_webhook });
7 | web.send({
8 | content: `Warning`
9 | });
10 | };
11 |
--------------------------------------------------------------------------------
/events/client/shardResume.js:
--------------------------------------------------------------------------------
1 | const { white, yellow } = require("chalk");
2 | const { WebhookClient } = require('discord.js')
3 |
4 | module.exports = async (client, id) => {
5 | console.log(white('[') + yellow('WARN') + white('] ') + yellow('Shard ') + white(id) + yellow(' Shard Resumed!'));
6 |
7 | const web = new WebhookClient({ url: client.er_webhook });
8 | web.send({
9 | content: `Shard with id ${id} resumed`
10 | });
11 | }
--------------------------------------------------------------------------------
/web/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "spicyflixweb",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "scripts": {
6 | "test": "echo \"Error: no test specified\" && exit 1",
7 | "start": "concurrently \"cd server && npm run dev\" \"cd client && npm run dev\" "
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "description": "",
13 | "dependencies": {
14 | "concurrently": "^8.2.2"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/events/client/rateLimit.js:
--------------------------------------------------------------------------------
1 | const { white, red } = require('chalk');
2 | const { WebhookClient } = require('discord.js')
3 |
4 | module.exports = async (client, info) => {
5 | console.log(white(' [') + red('ERROR') + white('] ') + red('Rate Limited, Sleeping for ') + white(0) + red(' seconds'));
6 |
7 | const web = new WebhookClient({ url: client.er_webhook });
8 | web.send({
9 | content: `bot rate limited, sleeping for ${0} secounds`
10 | });
11 | }
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Gay.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "gayporn",
3 | "gaybrosgonewild",
4 | "gaycumsluts",
5 | "gay_sex_videos",
6 | "shemale_sex_videos",
7 | "gay_solo_sex"
8 | //fuck all gays
9 | ]
10 |
11 | function get_res() {
12 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
13 |
14 | const randomChoice = randomsubredditGet[randomIndex];
15 | return randomChoice
16 | }
17 | module.exports = get_res;
--------------------------------------------------------------------------------
/events/client/disconnect.js:
--------------------------------------------------------------------------------
1 | const { white, yellow } = require('chalk');
2 | const { WebhookClient } = require('discord.js')
3 |
4 | module.exports = async (client) => {
5 | console.log(white('[') + yellow('WARN') + white('] ') + yellow('Disconnected ') + white(`${client.user.tag} (${client.user.id})`) + yellow(' '));
6 |
7 | const web = new WebhookClient({ url: client.er_webhook });
8 | web.send({
9 | content: `${client.user.tag} disconnected`
10 | });
11 | };
12 |
--------------------------------------------------------------------------------
/handlers/Database/loadDatabase.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | require("dotenv").config();
3 |
4 | module.exports = async () => {
5 | try {
6 | await mongoose.connect(process.env.MONGO_URI, {
7 | useNewUrlParser: true,
8 | useUnifiedTopology: true,
9 | useFindAndModify: false,
10 | useCreateIndex: true
11 | });
12 | } catch (error) {
13 | console.log('[ERROR] please check your mongo db database ', error);
14 | }
15 | }
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Feet.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "girlsinyogapants",
3 | "stockings",
4 | "legs",
5 | "tightshorts",
6 | "buttsandbarefeet",
7 | "feet",
8 | "datgap",
9 | "thighhighs",
10 | "thickthighs",
11 | "thighdeology"
12 | ]
13 |
14 | function get_res() {
15 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
16 |
17 | const randomChoice = randomsubredditGet[randomIndex];
18 | return randomChoice
19 | }
20 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Teens.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "legalteens",
3 | "collegesluts",
4 | "adorableporn",
5 | "legalteensXXX",
6 | "gonewild18",
7 | "18_19",
8 | "just18",
9 | "PornStarletHQ",
10 | "fauxbait",
11 | "barelylegalteens",
12 | ]
13 |
14 | function get_res() {
15 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
16 |
17 | const randomChoice = randomsubredditGet[randomIndex];
18 | return randomChoice
19 | }
20 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/others/pinporn_requester.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 |
3 | const pinporn_requester = (url, headers, callback) => {
4 | const options = {
5 | json: true,
6 | jsonReplacer: true,
7 | url,
8 | headers,
9 | };
10 |
11 | request(options, (error, response, body) => {
12 | if (error) {
13 | callback(error, null);
14 | return;
15 | }
16 | callback(null, body);
17 | });
18 | };
19 |
20 | module.exports = {
21 | pinporn_requester,
22 | };
23 |
--------------------------------------------------------------------------------
/Functions/others/one_requester.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 | //set request for some sites
3 | const request_site = (url, headers, callback) => {
4 | const options = {
5 | json: true,
6 | jsonReplacer: true,
7 | url,
8 | headers,
9 | };
10 |
11 | request(options, (error, response, body) => {
12 | if (error) {
13 | callback(error, null);
14 | return;
15 | }
16 | callback(null, body);
17 | });
18 | };
19 |
20 | module.exports = {
21 | request_site,
22 | };
23 |
--------------------------------------------------------------------------------
/Functions/others/pikped_requester.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 |
3 | const pikped_requester = (url, headers, callback) => {
4 | const options = {
5 | json: true,
6 | jsonReplacer: true,
7 | method: 'GET',
8 | url,
9 | headers,
10 | };
11 |
12 | request(options, (error, response, body) => {
13 | if (error) {
14 | callback(error, null);
15 | return;
16 | }
17 | callback(null, body);
18 | });
19 | };
20 |
21 | module.exports = {
22 | pikped_requester,
23 | };
24 |
--------------------------------------------------------------------------------
/commands/Porn/Eboy.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { eboy_pinporn } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["eboy"],
5 | description: "get random eboy porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [eboy_pinporn];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Pussy.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "pussy",
3 | "rearpussy",
4 | "innie",
5 | "simps",
6 | "pelfie",
7 | "LabiaGW",
8 | "godpussy",
9 | "presenting",
10 | "cameltoe",
11 | "hairypussy",
12 | "pantiestotheside",
13 | "breakingtheseal",
14 | "moundofvenus",
15 | "pussymound"
16 | ]
17 |
18 | function get_res() {
19 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
20 |
21 | const randomChoice = randomsubredditGet[randomIndex];
22 | return randomChoice
23 | }
24 | module.exports = get_res;
--------------------------------------------------------------------------------
/commands/Porn/Dildo.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { dildo_pinporn, dildo_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["dildo"],
5 | description: "get random dildo porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [dildo_pinporn, dildo_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Functions/defultErloading.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ActionRowBuilder,
2 | ButtonBuilder,
3 | ButtonStyle } = require("discord.js");
4 | require("dotenv").config();
5 |
6 | function defaulterloading(interaction) {
7 | const embed = new EmbedBuilder()
8 | .setDescription(`file was too large to upload! **just try using commands again to get more content**\n\n[support server](${process.env.SUPPORT_SERVER})`)
9 | .setColor(process.env.EMBED_COLOR);
10 |
11 | return embed;
12 | }
13 |
14 | module.exports = {
15 | defaulterloading,
16 | };
17 |
--------------------------------------------------------------------------------
/commands/Porn/Gay.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { gay_pinporn, gay_fiqfuq, gay_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["gay"],
5 | description: "get random gay porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [gay_pinporn, gay_fiqfuq, gay_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Milf.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { milf_hotscop, milf_pinporn, milf_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["milf"],
5 | description: "get random milf porn",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [milf_hotscop, milf_pinporn, milf_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Anal.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { anal_hotscop, anal_pinporn, anal_fiqfuq } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["anal"],
5 | description: "get random anal porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [anal_hotscop, anal_pinporn, anal_fiqfuq];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Functions/defaultErrshow.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ActionRowBuilder,
2 | ButtonBuilder,
3 | ButtonStyle } = require("discord.js");
4 | require("dotenv").config();
5 |
6 | function defershow(interaction) {
7 | const embed = new EmbedBuilder()
8 | .setDescription(`something went wrng while send request to api please report this issue to the support servre or try using command later**\n\n[support server](${process.env.SUPPORT_SERVER})`)
9 | .setColor(process.env.EMBED_COLOR);
10 |
11 | return embed;
12 | }
13 |
14 | module.exports = {
15 | defershow,
16 | };
17 |
--------------------------------------------------------------------------------
/Functions/others/onlytik_requester.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 |
3 | const onlytik_requester = (url, headers, callback) => {
4 | const options = {
5 | json: true,
6 | jsonReplacer: true,
7 | method: 'POST',
8 | url,
9 | headers,
10 | body: {
11 | limit: 10,
12 | },
13 | };
14 |
15 | request(options, (error, response, body) => {
16 | if (error) {
17 | callback(error, null);
18 | return;
19 | }
20 | callback(null, body);
21 | });
22 | };
23 |
24 | module.exports = {
25 | onlytik_requester,
26 | };
27 |
--------------------------------------------------------------------------------
/commands/Porn/Feet.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { feet_xfollow, feet_pinporn, fetish_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["feet"],
5 | description: "get random feet / fetish porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [feet_xfollow, feet_pinporn, fetish_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Blowjob.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { blowjob_fiqfuq, blowjob_pinporn, blowjob_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["blowjob"],
5 | description: "get random blowjob porn",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [blowjob_fiqfuq, blowjob_pinporn, blowjob_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Lesbian.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { lesbian_hotscop, lesbian_pinporn, lesbian_fiqfuq } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["lesbian"],
5 | description: "get random lesbian porn",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [lesbian_hotscop, lesbian_pinporn, lesbian_fiqfuq];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Cuckold.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { cuckold_pinporn, cuckold_fiqfuq, cuckold_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["cuckold"],
5 | description: "get random cuckold porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [cuckold_pinporn, cuckold_fiqfuq, cuckold_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Homemade.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { homemade_hotscop, homemade_pinporn, homemade_fiqfuq } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["homemade"],
5 | description: "get random homemade porn",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [homemade_hotscop, homemade_pinporn, homemade_fiqfuq];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Asian.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { asian_hotscop, asian_pinporn, asian_fiqfuq, asian_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["asian"],
5 | description: "get random asian porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [asian_hotscop, asian_pinporn, asian_fiqfuq, asian_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/commands/Porn/Boobs.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { boobs_hotscop, boobs_pinporn, boobs_fiqfuq, boobs_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["boobs"],
5 | description: "get random boobs porn video",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [boobs_hotscop, boobs_pinporn, boobs_fiqfuq, boobs_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Functions/defaultPremiumer.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ActionRowBuilder,
2 | ButtonBuilder,
3 | ButtonStyle } = require("discord.js");
4 | require("dotenv").config();
5 |
6 | function defaultPremium(interaction) {
7 | const embed = new EmbedBuilder()
8 | .setTitle("Premium Required!")
9 | .setDescription(`${interaction.user.username}, this command needs premium to work and you can join our [support](${process.env.SUPPORT_SERVER}) to read about how you can get premium`)
10 | .setColor(process.env.EMBED_COLOR)
11 |
12 | return embed;
13 | }
14 |
15 | module.exports = {
16 | defaultPremium,
17 | };
18 |
--------------------------------------------------------------------------------
/commands/Porn/Onlyfans.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { onlyfans_hotscop, onlyfans_pinporn, onlyfans_fiqfuq, onlyfans_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["onlyfans"],
5 | description: "get random onlyfans porn",
6 | run: async (interaction, client, user, language) => {
7 | const replies = [onlyfans_hotscop, onlyfans_pinporn, onlyfans_fiqfuq, onlyfans_xfollow];
8 | const reply = replies[Math.floor(Math.random() * replies.length)];
9 | await reply(interaction, client);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/handlers/loadEvent.js:
--------------------------------------------------------------------------------
1 | const { white, green } = require("chalk");
2 | const { readdirSync } = require('fs');
3 |
4 | module.exports = async (client) => {
5 | const loadcommand = dirs => {
6 | const events = readdirSync(`./events/${dirs}/`).filter(d => d.endsWith('.js'));
7 | for (let file of events) {
8 | const evt = require(`../events/${dirs}/${file}`);
9 | const eName = file.split('.')[0];
10 | client.on(eName, evt.bind(null, client));
11 | }
12 | };
13 | ["client", "guild"].forEach((x) => loadcommand(x));
14 | console.log(white('[') + green('INFO') + white('] ') + green('✅ Event ') + white('Events') + green(' Loaded!'));
15 | };
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Cum.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "cumsluts",
3 | "GirlsFinishingTheJob",
4 | "cumfetish",
5 | "amateurcumsluts",
6 | "cumcoveredfucking",
7 | "cumhaters",
8 | "thickloads",
9 | "before_after_cumsluts",
10 | "pulsatingcumshots",
11 | "impressedbycum",
12 | "creampies",
13 | "throatpies",
14 | "FacialFun",
15 | "cumonclothes",
16 | "oralcreampie",
17 | "creampie"
18 | ]
19 |
20 | function get_res() {
21 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
22 |
23 | const randomChoice = randomsubredditGet[randomIndex];
24 | return randomChoice
25 | }
26 | module.exports = get_res;
--------------------------------------------------------------------------------
/commands/General/Ping.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle, AttachmentBuilder } = require("discord.js");
2 | const { request } = require("http");
3 | const moment = require("moment");
4 | require("moment-duration-format");
5 |
6 | module.exports = {
7 | name: ["ping"],
8 | description: "check bot ping",
9 | run: async (interaction, client) => {
10 | const embed = new EmbedBuilder()
11 | .setColor(client.color)
12 | .setDescription(`websocket latency: ${client.ws.ping}ms\ninteraction latency: ${Date.now() - interaction.createdTimestamp}ms`)
13 |
14 | interaction.reply({ embeds: [embed] });
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/settings/models/Premium.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 |
3 | const CreatePremium = mongoose.Schema({
4 | Id: {
5 | type: String,
6 | required: true,
7 | unique: true
8 | },
9 | isPremium: {
10 | type: Boolean,
11 | default: false
12 | },
13 |
14 | premium: {
15 |
16 | redeemedBy: {
17 | type: Array,
18 | default: null
19 | },
20 | redeemedAt: {
21 | type: Number,
22 | default: null
23 | },
24 | expiresAt: {
25 | type: Number,
26 | default: null
27 | },
28 | plan: {
29 | type: String,
30 | default: null
31 | }
32 | }
33 | })
34 | module.exports = mongoose.model('Premium', CreatePremium)
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Boobs.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "boobies",
3 | "TittyDrop",
4 | "boltedontits",
5 | "boobbounce",
6 | "boobs",
7 | "downblouse",
8 | "homegrowntits",
9 | "cleavage",
10 | "breastenvy",
11 | "youtubetitties",
12 | "torpedotits",
13 | "thehangingboobs",
14 | "page3glamour",
15 | "fortyfivefiftyfive",
16 | "tits",
17 | "amazingtits",
18 | "titstouchingtits",
19 | "pokies",
20 | "titfuck",
21 | "clothedtitfuck"
22 | ]
23 |
24 | function get_res() {
25 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
26 |
27 | const randomChoice = randomsubredditGet[randomIndex];
28 | return randomChoice
29 | }
30 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Public.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "ChangingRooms",
3 | "workgonewild",
4 | "FlashingGirls",
5 | "publicflashing",
6 | "sexinfrontofothers",
7 | "NotSafeForNature",
8 | "gwpublic",
9 | "realpublicnudity",
10 | "flashingandflaunting",
11 | "publicsexporn",
12 | "nakedadventures",
13 | "publicsexporn",
14 | "public",
15 | "PublicFlashing",
16 | "gwpublic",
17 | "exposedinpublic",
18 | "ChangingRooms",
19 | "Publicsex"]
20 |
21 |
22 |
23 |
24 | function get_res() {
25 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
26 |
27 | const randomChoice = randomsubredditGet[randomIndex];
28 | return randomChoice
29 | }
30 | module.exports = get_res;
--------------------------------------------------------------------------------
/web/server/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const cors = require("cors");
3 | const axios = require("axios");
4 |
5 | const port = 5000;
6 | const hostname = "127.0.0.1";
7 |
8 | const server = express();
9 |
10 | const options = {
11 | origin: "*",
12 | };
13 |
14 | server.use(cors(options));
15 | server.use("/api/video", async (req, res) => {
16 | try {
17 | const response = await axios.get(
18 | "https://spicyflix-api.vercel.app/api/tiktok",
19 | );
20 | res.status(200).json(response.data);
21 | } catch (error) {
22 | console.log(error);
23 | res.status(500).json({ message: error.message });
24 | }
25 | });
26 |
27 | server.listen(port, hostname, () => {
28 | console.log(`server running @ http:${hostname}:${port}`);
29 | });
30 |
--------------------------------------------------------------------------------
/Functions/defaultNsfwEmbed.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ActionRowBuilder,
2 | ButtonBuilder,
3 | ButtonStyle,
4 | AttachmentBuilder } = require("discord.js");
5 | require("dotenv").config();
6 |
7 | function defaultNSFW(interaction) {
8 | const embed = new EmbedBuilder()
9 | .setImage("https://cdn.discordapp.com/attachments/1197997344378077235/1202219330092146718/SpicyFlix.gif")
10 | .setDescription(`${interaction.user.username}, this command can only works in NSFW channels please turn it back-on and try again using of this command\n\n[support server](${process.env.SUPPORT_SERVER})`)
11 | .setColor(process.env.EMBED_COLOR);
12 |
13 | return embed;
14 | }
15 |
16 | module.exports = {
17 | defaultNSFW,
18 | };
19 |
--------------------------------------------------------------------------------
/settings/models/GPremium.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose')
2 |
3 | const CreateGuildPremium = mongoose.Schema({
4 | Id: {
5 | type: String,
6 | required: true,
7 | unique: true
8 | },
9 | isPremium: {
10 | type: Boolean,
11 | default: false
12 | },
13 |
14 | premium: {
15 | redeemedBy: {
16 | type: Array,
17 | default: null
18 | },
19 | redeemedAt: {
20 | type: Number,
21 | default: null
22 | },
23 | expiresAt: {
24 | type: Number,
25 | default: null
26 | },
27 | plan: {
28 | type: String,
29 | default: null
30 | }
31 | }
32 | })
33 | module.exports = mongoose.model('GuildPremium', CreateGuildPremium)
--------------------------------------------------------------------------------
/commands/Porn/Tiktok.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { tiktok_figfat, tiktok_hotscop, tiktok_onlytik, tiktok_xfollow, tiktok_pinporn, tiktok_tikporn, tiktok_tube,
3 | tiktok_fiqfuq, tiktok_fikfap } = require("../../Functions/porn_cmd/requester")
4 | module.exports = {
5 | name: ["tiktok"],
6 | description: "get random tiktok nsfw video",
7 | run: async (interaction, client, user, language) => {
8 | const replies = [tiktok_xfollow, tiktok_figfat, tiktok_hotscop, tiktok_onlytik, tiktok_fiqfuq, tiktok_pinporn, tiktok_tikporn, tiktok_tube, tiktok_fikfap];
9 | const reply = replies[Math.floor(Math.random() * replies.length)];
10 | await reply(interaction, client);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Functions/BotLists/hasvoted.botlist.me.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 | require("dotenv").config();
3 | //check has voted user
4 | const botlistme_hasvoted = (id, user_id, callback) => {
5 |
6 | const headers = {
7 | authorization: process.env.BOTLISTMETOKEN,
8 | 'Content-Type': 'application/json',
9 | };
10 |
11 | const options = {
12 | url: `https://api.botlist.me/api/v1/bots/${id}/voted?userId=${user_id}`,
13 | method: 'GET',
14 | headers: headers,
15 | json: true,
16 | };
17 |
18 |
19 | request(options, (error, response, body) => {
20 | if (error) {
21 | callback(error, null);
22 | return;
23 | }
24 | callback(null, body, response);
25 | });
26 | };
27 |
28 | module.exports = {
29 | botlistme_hasvoted,
30 | };
31 |
--------------------------------------------------------------------------------
/commands/Porn/Porn.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { porn_hotscop, porn_pinporn, porn_saved, porn_fiqfuq, porn_xfollow } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["porn"],
5 | description: "get random porn video",
6 | run: async (interaction, client, user, language) => {
7 | try {
8 | const replies = [porn_hotscop, porn_pinporn, porn_saved, porn_fiqfuq, porn_xfollow];
9 | const reply = replies[Math.floor(Math.random() * replies.length)];
10 | await reply(interaction, client);
11 | } catch (e) {
12 | interaction.editReply({ content: "content was too big to upload! just use another one" })
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Thick.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "gonewildcurvy",
3 | "GoneWildplus",
4 | "BigBoobsGW",
5 | "bigboobsgonewild",
6 | "mycleavage",
7 | "gonewildchubby",
8 | "gonewildcurvy",
9 | "curvy",
10 | "gonewildplus",
11 | "thick",
12 | "juicyasians",
13 | "voluptuous",
14 | "biggerthanyouthought",
15 | "jigglefuck",
16 | "chubby",
17 | "SlimThick",
18 | "massivetitsnass",
19 | "thicker",
20 | "thickthighs",
21 | "tightsqueeze",
22 | "casualjiggles",
23 | "bbw",
24 | "gonewildchubby",
25 | "amazingcurves"
26 | ]
27 |
28 | function get_res() {
29 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
30 |
31 | const randomChoice = randomsubredditGet[randomIndex];
32 | return randomChoice
33 | }
34 | module.exports = get_res;
--------------------------------------------------------------------------------
/handlers/Database/loadPremium.js:
--------------------------------------------------------------------------------
1 | const cron = require('node-cron')
2 | const Premium = require("../../settings/models/Premium.js");
3 |
4 | module.exports = async (client) => {
5 | cron.schedule('*/60 * * * * *', async () => {
6 | await Premium.find({ isPremium: true }, async (err, users) => {
7 | if (users && users.length) {
8 |
9 | for (let user of users) {
10 | if (Date.now() >= user.premium.expiresAt) {
11 |
12 | user.isPremium = false
13 | user.premium.redeemedBy = []
14 | user.premium.redeemedAt = null
15 | user.premium.expiresAt = null
16 | user.premium.plan = null
17 |
18 | const newUser = await user.save({ new: true }).catch(() => { })
19 | client.premiums.set(newUser.Id, newUser)
20 | }
21 | }
22 | }
23 | })
24 | })
25 | }
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Ass.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "pawg",
3 | "BigAss",
4 | "BigBootyPorn",
5 | "smalltitsbigass",
6 | "booty_queens",
7 | "JizzedToThis",
8 | "curvy",
9 | "ass",
10 | "asstastic",
11 | "facedownassup",
12 | "assinthong",
13 | "bigasses",
14 | "buttplug",
15 | "TheUnderbun",
16 | "booty",
17 | "pawg",
18 | "paag",
19 | "cutelittlebutts",
20 | "hipcleavage",
21 | "frogbutt",
22 | "HungryButts",
23 | "cottontails",
24 | "lovetowatchyouleave",
25 | "celebritybutts",
26 | "cosplaybutts",
27 | "whooties",
28 | "twerking"
29 | ]
30 |
31 | function get_res() {
32 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
33 |
34 | const randomChoice = randomsubredditGet[randomIndex];
35 | return randomChoice
36 | }
37 | module.exports = get_res;
--------------------------------------------------------------------------------
/Functions/others/pinporn_categories.js:
--------------------------------------------------------------------------------
1 | let rang = {
2 | "535": "Teens",
3 | "58": "Random",
4 | "270": "Thick",
5 | "25": "Milf",
6 | "592": "Cuckold",
7 | "32": "Asian",
8 | "196": "Ass",
9 | "375": "BDSM",
10 | "14": "Blowjob",
11 | "201": "Boobs",
12 | "190": "Cum",
13 | "12": "Eboy",
14 | "327": "Homemade",
15 | "19": "Lesbian",
16 | "214": "Onlyfans",
17 | "226": "TikTok",
18 | "7": "Anal",
19 | "287": "Feet",
20 | "273": "dildo",
21 | "560": "Gay"
22 | }
23 | //check pin.porn if you want add more thing here
24 |
25 | function pinporncategory() {
26 | const subbesorderre = Object.keys(rang);
27 | const rank = subbesorderre[Math.floor(Math.random() * subbesorderre.length)];
28 | const ranname = rang[rank];
29 |
30 | return {
31 | id: rank,
32 | name: ranname,
33 | };
34 | }
35 |
36 | module.exports = pinporncategory;
--------------------------------------------------------------------------------
/.env.spicyflix:
--------------------------------------------------------------------------------
1 | TOKEN=#bot token
2 | EMBED_COLOR=#ca2c2b
3 | SUPPORT_SERVER=#support server link
4 | OWNER_ID=#owner id here (need this section if u want premium functions)
5 | MONGO_URI=#mongo db here
6 | IMAGE=#idk what is this
7 | REDDIT_AGENT=#use a random agent here
8 | pikped_useragent=#use a random agent here
9 | pinporn_agent=#use a random user agent here
10 | FIKFAP_AUTH=#just check https://fikfap.com/ to get it
11 | HOTSCOPE_AGENT=#use a random agent here
12 | BOTLISTMETOKEN=#botlist.me token (if u need)
13 | WAPTAP_AGENT=#use a random agent here
14 | G_AGENT=#use a random agent here
15 | BOTLISTLOG=#webhook url (status log)
16 | BOLISTME=#set true or false (true is you have botlist.me token and false it you dont have or dont want)
17 | WAPTAP_COOKIE=#check https://waptap.com/ to find it
18 | GUILD_LOGS=#webhook here (guild join-remove log)
19 | ER_WEBHOOK=#webhook here (errors log)
20 | SHARDS_READY_WEBHOOK=#webhook here (shard ready log)
--------------------------------------------------------------------------------
/events/client/shardReady.js:
--------------------------------------------------------------------------------
1 | const { white, green } = require("chalk");
2 | const { ShardingManager, EmbedBuilder, WebhookClient } = require('discord.js'); //imports the sharding manager
3 | require("dotenv").config();
4 |
5 | const web = new WebhookClient({ url: process.env.SHARDS_READY_WEBHOOK });
6 | const erweb = new WebhookClient({ url: process.env.ER_WEBHOOK });
7 |
8 | module.exports = async (client, id) => {
9 | console.log(white('[') + green('INFO') + white('] ') + green('Shard ') + white(id) + green(' Shard Ready!!!'));
10 | let embed = new EmbedBuilder()
11 | .setTitle(`Shard Lunching`)
12 | .setDescription(`ok, our shard are lunching...`)
13 | .setFields([
14 | {
15 | name: "Shard ID",
16 | value: `${id + 1}`,
17 | inline: true
18 | },
19 | ])
20 | .setColor("Green");
21 |
22 | web.send({
23 | embeds: [embed]
24 | })
25 | }
--------------------------------------------------------------------------------
/commands/Porn/Search.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, ApplicationCommandOptionType, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const { pornhub_searcher } = require("../../Functions/porn_cmd/requester")
3 | module.exports = {
4 | name: ["search"],
5 | description: "search porn videos on pornhub",
6 | options: [
7 | {
8 | name: "search",
9 | description: "what type of video do you want to search ?",
10 | type: ApplicationCommandOptionType.String,
11 | required: true
12 | }
13 | ],
14 | run: async (interaction, client, user, language) => {
15 | const searcherstring = interaction.options.getString("search");
16 | const replies = [pornhub_searcher];
17 | const reply = replies[Math.floor(Math.random() * replies.length)];
18 | await reply(interaction, client, searcherstring);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/commands/General/Invite.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle, AttachmentBuilder } = require("discord.js");
2 | module.exports = {
3 | name: ["invite"],
4 | description: "invite SpicyFlix in your server",
5 | run: async (interaction, client) => {
6 |
7 | const row = new ActionRowBuilder()
8 | .addComponents(
9 | new ButtonBuilder()
10 | .setLabel("Invite")
11 | .setURL(client.invite)
12 | .setStyle(ButtonStyle.Link)
13 | )
14 |
15 | const embed = new EmbedBuilder()
16 | .setDescription(`[:heart: Thanks ${interaction.user.username} for inviting SpicyFlix, click on this link or below button to invite SpicyFlix](${client.invite})`)
17 | .setColor(client.color)
18 |
19 | interaction.reply({ embeds: [embed], components: [row] });
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Functions/BotLists/botlist.me.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 | require("dotenv").config();
3 | //use this if you have botlist.me things
4 | const botlistme_requester = (server_c, shard_c, id, callback) => {
5 |
6 | const data = {
7 | shard_count: shard_c,
8 | server_count: server_c,
9 | };
10 |
11 | const headers = {
12 | authorization: process.env.BOTLISTMETOKEN,
13 | 'Content-Type': 'application/json',
14 | };
15 |
16 | const options = {
17 | url: `https://api.botlist.me/api/v1/bots/${id}/stats`,
18 | method: 'POST',
19 | headers: headers,
20 | json: true,
21 | body: data,
22 | };
23 |
24 |
25 | request(options, (error, response, body) => {
26 | if (error) {
27 | callback(error, null);
28 | return;
29 | }
30 | callback(null, body, response);
31 | });
32 | };
33 |
34 | module.exports = {
35 | botlistme_requester,
36 | };
37 |
--------------------------------------------------------------------------------
/Functions/reddit_cmd_subs/Gonewild.js:
--------------------------------------------------------------------------------
1 | let randomsubredditGet = [
2 | "GoneWild",
3 | "PetiteGoneWild",
4 | "gonewildstories",
5 | "GoneWildTube",
6 | "treesgonewild",
7 | "gonewildaudio",
8 | "GWNerdy",
9 | "gonemild",
10 | "altgonewild",
11 | "gifsgonewild",
12 | "analgw",
13 | "gonewildsmiles",
14 | "onstageGW",
15 | "RepressedGoneWild",
16 | "bdsmgw",
17 | "UnderwearGW",
18 | "LabiaGW",
19 | "TributeMe",
20 | "WeddingsGoneWild",
21 | "gwpublic",
22 | "assholegonewild",
23 | "leggingsgonewild",
24 | "dykesgonewild",
25 | "goneerotic",
26 | "snapchatgw",
27 | "gonewildhairy",
28 | "gonewildtrans",
29 | "gonwild",
30 | "ratemynudebody",
31 | ]
32 |
33 | function get_res() {
34 | const randomIndex = Math.floor(Math.random() * randomsubredditGet.length);
35 |
36 | const randomChoice = randomsubredditGet[randomIndex];
37 | return randomChoice
38 | }
39 | module.exports = get_res;
--------------------------------------------------------------------------------
/commands/General/Support.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 |
3 | module.exports = {
4 | name: ["support"],
5 | description: "get bot support server",
6 | run: async (interaction, client, user, language) => {
7 |
8 | const embed = new EmbedBuilder()
9 | .setColor(client.color)
10 | .setAuthor({ name: "Support Server" })
11 | .setDescription(`[:wave: ${interaction.user.username}, Click on below button or this link to join support server](${client.support})`)
12 |
13 | const row = new ActionRowBuilder()
14 | .addComponents(
15 | new ButtonBuilder()
16 | .setLabel("Support")
17 | .setURL(`${client.support}`)
18 | .setStyle(ButtonStyle.Link)
19 | )
20 |
21 | interaction.editReply({ embeds: [embed], components: [row] });
22 | }
23 | }
--------------------------------------------------------------------------------
/Functions/others/FiqFuq_requester.js:
--------------------------------------------------------------------------------
1 | const request = require('request');
2 |
3 | // you can check fikfuq api to make some other changes here according to your needs
4 |
5 | const fikfud_requester = (url, group, discover, a_type, headers, rn_s, callback) => {
6 | const bodyData = {
7 | "a": a_type,
8 | "skip": rn_s,
9 | "limit": 12,
10 | "id": 0,
11 | "sort": 1,
12 | "author": "",
13 | "discover": discover,
14 | "category": group,
15 | "filter": "videos"
16 | };
17 |
18 | const options = {
19 | json: true,
20 | jsonReplacer: true,
21 | method: 'POST',
22 | url,
23 | headers,
24 | body: bodyData
25 | };
26 |
27 | request(options, (error, response, body) => {
28 | if (error) {
29 | callback(error, null);
30 | return;
31 | }
32 | callback(null, body);
33 | });
34 | };
35 |
36 | module.exports = {
37 | fikfud_requester,
38 | };
39 |
--------------------------------------------------------------------------------
/handlers/Database/loadGuildPremium.js:
--------------------------------------------------------------------------------
1 | const cron = require('node-cron')
2 | const gPremium = require("../../settings/models/GPremium.js");
3 |
4 | module.exports = async (client) => {
5 | cron.schedule('*/60 * * * * *', async () => {
6 | await gPremium.find({ isPremium: true }, async (err, users) => {
7 | if (users && users.length) {
8 |
9 | for (let user of users) {
10 | if (Date.now() >= user.premium.expiresAt) {
11 |
12 | user.isPremium = false
13 | user.premium.redeemedBy = []
14 | user.premium.redeemedAt = null
15 | user.premium.expiresAt = null
16 | user.premium.plan = null
17 |
18 | const newUser = await user.save({ new: true }).catch(() => { })
19 | client.premiums.set(newUser.Id, newUser)
20 | }
21 | }
22 | }
23 | })
24 | })
25 | }
--------------------------------------------------------------------------------
/Functions/others/waptap_tiktok_categories.js:
--------------------------------------------------------------------------------
1 | let ranwaptaptiktokcat = {
2 | // "id": "name" , (name)
3 | //check waptap.com to find out this profiles and add them here
4 | "tiktoknsfw": "6360c25288bc57b6900fa1c9",
5 | "tiktok": "6352f2235b9c940b540cad77",
6 | "tiktokmujereslindas": "656cccd57bed68ae600edbfb",
7 | "tiktoker": "65a0067b6cddd8ed290c9797",
8 | "tiktok18+": "656a185474f2b36ed40a4c22",
9 | "tiktokxxx": "652e56937a3595fb550865a0",
10 | "tiktokthots": "656b4a24186c7a1a130195b2",
11 | "tiktokisdead": "63ac46acd7fe8016fa011fa4",
12 | "tiktokxxl": "652e568e7a3595fb55086514",
13 | "tiktoknsfw": "6365518dc076e8be1e0b01c3",
14 | "tiktokhot": "637d28b59a0170eda50ef323",
15 | "tiktokplus11": "6358b5a72e30e16d60047aa2",
16 | "tiktoknsfwlover": "635edae3e96249d34f0fc612",
17 | "toktok": "65b559df46d0d9bafc023712",
18 | "tiktik": "638a4ec03a3d263a750f3b9f",
19 | "titokzoli": "65afc72b6038f3b89e013db5",
20 | }
21 |
22 | function waptaptiktokran() {
23 | const keys = Object.keys(ranwaptaptiktokcat);
24 | const ranid = keys[Math.floor(Math.random() * keys.length)];
25 | const ranname = ranwaptaptiktokcat[ranid];
26 |
27 |
28 | return { name: ranname, id: ranid };
29 | }
30 |
31 | module.exports = waptaptiktokran;
--------------------------------------------------------------------------------
/commands/General/Help.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle, AttachmentBuilder } = require("discord.js");
2 |
3 | module.exports = {
4 | name: ["help"],
5 | description: "get help about bot",
6 | run: async (interaction, client) => {
7 | const embed = new EmbedBuilder()
8 | .setColor(client.color)
9 | .setImage("https://cdn.discordapp.com/attachments/1140544084293976087/1143870318172176394/banner.png")
10 | .setDescription(`:wave: ${interaction.user.username}, im SpicyFlix a greate nsfw bot that you always imagine could be exist! with cool section like *auto post*, *adult commands* and many more! you must just type **/** to see all my commands to use me!\n\nshhhh add me in your server and enjoy, yourwelcome :)`)
11 |
12 | const btns = new ActionRowBuilder()
13 | .addComponents(
14 | new ButtonBuilder()
15 | .setLabel("Invite")
16 | .setURL(client.invite)
17 | .setStyle(ButtonStyle.Link),
18 | new ButtonBuilder()
19 | .setLabel("Support")
20 | .setURL(client.support)
21 | .setStyle(ButtonStyle.Link)
22 | )
23 | interaction.reply({ content: `join our community ${client.support}`, embeds: [embed], components: [btns] });
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/web/client/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Functions/AutoRandomSavedSender.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoNudeSender")
2 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ChannelType, WebhookClient } = require("discord.js");
3 | var { video } = require('../videos.json')
4 |
5 | //this function is free
6 | module.exports = {
7 | webhook_saved_sender: async function (client) {
8 | var content = `${video[Math.floor(Math.random() * video.length)]}`
9 |
10 | try {
11 | const webhooks = await db.find();
12 |
13 | await Promise.all(webhooks.map(async (webhookData) => {
14 | const { channelId, webhook } = webhookData;
15 |
16 | const channel = await client.channels.fetch(channelId);
17 | const web = new WebhookClient({ url: webhook });
18 |
19 | try {
20 | await web.send({ content: `**Random Content**[⠀](${content})` })
21 | console.log(`[Auto Video saved] sended in ${channel.id} (${channel.name})`);
22 | } catch (error) {
23 | console.error(`[Auto Video saved] error cant send in ${channel.name}:`, error);
24 | const webhooklogger = new WebhookClient({ url: client.logger })
25 | // webhooklogger.send({
26 | // content: `${error}`
27 | // })
28 | }
29 |
30 | }));
31 | } catch (e) {
32 | console.log(e)
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "spicy-flix",
3 | "version": "2.0.1",
4 | "description": "discord nsfw bot",
5 | "main": "index.js",
6 | "dependencies": {
7 | "@discordjs/opus": "^0.9.0",
8 | "@discordjs/voice": "^0.16.1",
9 | "@ffmpeg-installer/ffmpeg": "^1.1.0",
10 | "botlist.me.js": "^1.0.3",
11 | "chalk": "^4.1.0",
12 | "chillout": "^5.0.0",
13 | "common-tags": "^1.8.0",
14 | "delay": "^4.4.0",
15 | "discord.js": "^14.14.1",
16 | "dotenv": "^12.0.4",
17 | "fetch": "^1.1.0",
18 | "ffmpeg-static": "^5.2.0",
19 | "fluent-ffmpeg": "^2.1.2",
20 | "fs": "^0.0.1-security",
21 | "humanize-duration": "^3.27.1",
22 | "locale-parser": "^1.1.2",
23 | "moment": "^2.29.4",
24 | "moment-duration-format": "^2.3.2",
25 | "mongoose": "^5.9.19",
26 | "ms": "^2.1.3",
27 | "node-cron": "^3.0.2",
28 | "os": "^0.1.2",
29 | "plsargs": "^0.1.6",
30 | "pornhub.js": "^1.7.4",
31 | "process": "^0.11.10",
32 | "recursive-readdir": "^2.2.2",
33 | "request": "^2.88.2",
34 | "rm": "^0.1.8",
35 | "stuffs": "^0.1.17",
36 | "uuid": "^8.3.2",
37 | "voucher-code-generator": "^1.3.0"
38 | },
39 | "scripts": {
40 | "start": "node --no-warnings index.js"
41 | },
42 | "author": "Enterprise",
43 | "license": "Apache-2.0",
44 | "repository": {
45 | "type": "git",
46 | "url": "git+https://github.com/Enterprise-ir/Prima.git"
47 | },
48 | "bugs": {
49 | "url": "https://github.com/Enterprise-ir/Prima/issues"
50 | },
51 | "homepage": "https://github.com/Enterprise-ir/Prima#readme",
52 | "devDependencies": {
53 | "node": "^17.0.1"
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SpicyFlix NSFW Bot
2 | a cool and advanced discord verified bot with over 1.6k guilds with powefull and various used apis you can [invite here](https://discord.com/oauth2/authorize?client_id=1185495860008730745&permissions=259845838912&integration_type=0&scope=bot) the bot.
3 |
4 | ## Installation
5 | - Clone the file
6 | - cd spicyflix
7 | - npm install
8 | - node deploySlash.js global (do this after each changing you done in api)
9 | - node .
10 |
11 |
12 | ## Configuration
13 | - Rename `.env.spicyflix` to `.env` and fill it (your bot cant work if you dont fill it)
14 |
15 | ## Used Apis
16 | - waptap
17 | - fiqfuk
18 | - onlytik
19 | - pinporn
20 | - hotscope
21 | - redgifs
22 | - xfollow
23 | - slushy
24 | - and some other sites...
25 |
26 | ## Understanding and Usage
27 | This codebase is designed to be straightforward and easy to understand.
28 | We encourage users to delve into the code, debug it, and customize it to suit their needs.
29 | We do not provide specific tutorials or support for using this code as it is intended for individuals familiar with the technologies involved.
30 |
31 | ## Credits and Contribution Guidelines
32 | If you're using this code (main repo by adivise), we kindly request that you acknowledge the developer by mentioning "developed by Soul" and include a link to our GitHub repository.
33 | You're free to modify the code design and incorporate additional updates to suit your needs.
34 | Please note that our name is not mentioned anywhere within the code itself, so providing credit is entirely optional on your part.
35 |
36 | Thank you for respecting these guidelines and happy coding! [Our Discord Support Server](https://discord.gg/KKCVmtTZwB)
37 |
--------------------------------------------------------------------------------
/settings/config.js:
--------------------------------------------------------------------------------
1 | require("dotenv").config();
2 | const { resolve } = require("path");
3 |
4 | //fill out this module or check .env file
5 | module.exports = {
6 | TOKEN: process.env.TOKEN || "",
7 | EMBED_COLOR: process.env.EMBED_COLOR || "#ca2c2b",
8 | SUPPOER: "",
9 | MAIN_SUPPORT: "",
10 | OWNER_ID: process.env.OWNER_ID || "",
11 | USERAGENT: "",
12 | SPOILER: ` |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| _ _ _ _ _ _ `,
13 | LOGGER: "",
14 | DEV_ID: [],
15 | PIKPED_USERAGENT: "",
16 | IMAGE: "",
17 | INVITE: "",
18 | MONGO_URI: process.env.MONGO_URI || "mg",
19 | SHARDS_READY_WEBHOOK: process.env.SHARDS_READY_WEBHOOK || "",
20 | ER_WEBHOOK: process.env.ER_WEBHOOK || "",
21 | BOTLISTLOG: process.env.BOTLISTLOG || "",
22 | WAPTAP_COOKIE: process.env.WAPTAP_COOKIE || ""
23 | }
--------------------------------------------------------------------------------
/handlers/Setup/PremiumRunnder.js:
--------------------------------------------------------------------------------
1 | const Premium = require('../../settings/models/Premium.js');
2 | const Profile = require("../../settings/models/Redeem.js")
3 |
4 | const gPremium = require('../../settings/models/GPremium.js');
5 | const gProfile = require("../../settings/models/GRedeem.js")
6 | module.exports = async (client) => {
7 | client.createPremium = async function (interaction, user) {
8 | const findUser = await Premium.findOne({ Id: interaction.user.id });
9 | if (!findUser) {
10 | const newUser = await Premium.create({
11 | Id: interaction.user.id
12 | });
13 | await newUser.save();
14 |
15 | interaction.client.premiums.set(interaction.user.id, newUser);
16 | }
17 | }
18 |
19 | client.CreateGuildPremium = async function (interaction, user) {
20 | const findUser = await gPremium.findOne({ Id: interaction.guild.id });
21 | if (!findUser) {
22 | const newUser = await gPremium.create({
23 | Id: interaction.guild.id
24 | });
25 | await newUser.save();
26 |
27 | interaction.client.premiums.set(interaction.guild.id, newUser);
28 | }
29 | }
30 |
31 | client.createDatabase = async function (interaction) {
32 | const CProfile = await Profile.findOne({ userId: interaction.user.id });
33 | if (!CProfile) {
34 | const newUser = await Profile.create({
35 | userId: interaction.user.id,
36 | });
37 | await newUser.save();
38 | }
39 | }
40 |
41 | client.interval = null;
42 |
43 | client.clearInterval = async function (interval) {
44 | clearInterval(interval);
45 | }
46 | }
--------------------------------------------------------------------------------
/web/client/main.js:
--------------------------------------------------------------------------------
1 | import "./style.css";
2 | import axios from "axios";
3 |
4 | const port = 5000;
5 | const hostname = "127.0.0.1";
6 |
7 | function showMessage(message) {
8 | document.querySelector("#app").innerHTML = `${message}
`;
9 | }
10 |
11 | async function fetchVideo() {
12 | try {
13 | const res = await axios.get(`http://${hostname}:${port}/api/video`);
14 | console.log(res.data[0].response);
15 | return res.data[0].response; // Adjust if necessary
16 | } catch (error) {
17 | console.error(error);
18 | showMessage("Failed to load video");
19 | return null;
20 | }
21 | }
22 |
23 | async function init() {
24 | let videoUrl = await fetchVideo();
25 | if (videoUrl) {
26 | setupPage(videoUrl);
27 | } else {
28 | showMessage("Loading video...");
29 | }
30 |
31 | document.querySelector("#app").addEventListener("click", async (event) => {
32 | const newVideoUrl = await fetchVideo();
33 | if (newVideoUrl) {
34 | updateVideoSource(newVideoUrl);
35 | } else {
36 | showMessage("Failed to load new video");
37 | }
38 | });
39 | }
40 |
41 | function setupPage(videoUrl) {
42 | document.querySelector("#app").innerHTML = `
43 |
47 |
50 | `;
51 | }
52 |
53 | function updateVideoSource(url) {
54 | const videoElement = document.querySelector("#video-player");
55 | if (videoElement) {
56 | videoElement.querySelector("source").src = url;
57 | videoElement.load(); // Reload the video element to reflect the new source
58 | }
59 | }
60 |
61 | init();
62 |
--------------------------------------------------------------------------------
/handlers/loadCommand.js:
--------------------------------------------------------------------------------
1 | const chillout = require("chillout");
2 | const readdirRecursive = require("recursive-readdir");
3 | const { resolve, relative } = require("path");
4 | const { green, white } = require('chalk');
5 |
6 | module.exports = async (client) => {
7 | let interactionsPath = resolve("./commands");
8 | let interactionFiles = await readdirRecursive(interactionsPath);
9 |
10 | await chillout.forEach(interactionFiles, (interactionFile) => {
11 | const start = Date.now();
12 | const rltPath = relative(__dirname, interactionFile);
13 | // console.log(`[INFO] Loading interaction at.. "${interactionFile}"`)
14 | const command = require(interactionFile);
15 |
16 | if (command.name.length > 3) {
17 | console.log(`[WARN] "${rltPath}" The name list of the interaction file is too long. (>3) Skipping..`);
18 | return;
19 | }
20 |
21 | if (!command.name?.length) {
22 | console.log(`[WARN] "${rltPath}" The interaction file does not have a name. Skipping..`);
23 | return;
24 | }
25 |
26 | if (client.slash.has(command.name)) {
27 | console.log(`[WARN] "${command.name[1]}" interaction has already been installed. It's skipping.`)
28 | return;
29 | }
30 |
31 | client.slash.set(command.name, command);
32 | // console.log(`[INFO] "${command.type == "CHAT_INPUT" ? `/${command.name.join(" ")}` : `${command.name[0]}`}" ${command.name[1] || ""} ${command.name[2] || ""} The interaction has been uploaded. (it took ${Date.now() - start}ms)`);
33 | });
34 |
35 | if (client.slash.size) {
36 | console.log(white('[') + green('✅ INFO') + white('] ') + green(`${client.slash.size} `) + white('Interactions') + green(' Loaded!'));
37 | } else {
38 | console.log(`[WARN] No interactions loaded, is everything ok?`);
39 | }
40 | }
--------------------------------------------------------------------------------
/web/client/style.css:
--------------------------------------------------------------------------------
1 | :root {
2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
3 | line-height: 1.5;
4 | font-weight: 400;
5 |
6 | color-scheme: light dark;
7 | color: rgba(255, 255, 255, 0.87);
8 | background-color: #242424;
9 |
10 | font-synthesis: none;
11 | text-rendering: optimizeLegibility;
12 | -webkit-font-smoothing: antialiased;
13 | -moz-osx-font-smoothing: grayscale;
14 | }
15 |
16 | a {
17 | font-weight: 500;
18 | color: #646cff;
19 | text-decoration: inherit;
20 | }
21 | a:hover {
22 | color: #535bf2;
23 | }
24 |
25 | html,
26 | body {
27 | margin: 0;
28 | padding: 0;
29 | }
30 |
31 | h1 {
32 | font-size: 3.2em;
33 | line-height: 1.1;
34 | }
35 |
36 | #app {
37 | width: 60%;
38 | height: 100vh;
39 | margin: 0 auto;
40 | text-align: center;
41 | display: flex;
42 | flex-direction: column;
43 | gap: 1rem;
44 | align-items: center;
45 | justify-content: center;
46 | }
47 |
48 | video {
49 | height: 100%;
50 | width: 100%;
51 | }
52 |
53 | footer {
54 | position: absolute;
55 | bottom: 40px;
56 | left: 50%;
57 | transform: translateX(-50%);
58 | }
59 |
60 | button {
61 | background: rgba(255, 255, 255, 0.05);
62 | box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
63 | backdrop-filter: blur(7.5px);
64 | -webkit-backdrop-filter: blur(7.5px);
65 | border: 1px solid rgba(255, 255, 255, 0.18);
66 | border-radius: 8px;
67 | padding: 0.6em 1.2em;
68 | font-size: 1em;
69 | font-weight: 500;
70 | font-family: inherit;
71 | cursor: pointer;
72 | transition: border-color 0.25s;
73 | outline: none;
74 | }
75 |
76 | @media (prefers-color-scheme: light) {
77 | :root {
78 | color: #213547;
79 | background-color: #ffffff;
80 | }
81 | a:hover {
82 | color: #747bff;
83 | }
84 | button {
85 | background-color: #f9f9f9;
86 | }
87 | }
88 |
89 | @media (max-width: 786px) {
90 | #app {
91 | width: 100%;
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/spicy-flix.js:
--------------------------------------------------------------------------------
1 | const { Client, GatewayIntentBits, Collection } = require("discord.js");
2 | const process = require('node:process');
3 |
4 | class MainClient extends Client {
5 | constructor() {
6 | super({
7 | shards: "auto",
8 | allowedMentions: { parse: ["users", "roles"] },
9 | intents: [
10 | GatewayIntentBits.Guilds,
11 | GatewayIntentBits.GuildVoiceStates,
12 | GatewayIntentBits.GuildMessageReactions,
13 | ]
14 | });
15 |
16 | this.config = require("./settings/config.js");
17 | this.owner = this.config.OWNER_ID;
18 | this.spoiler = this.config.SPOILER;
19 | this.support = this.config.SUPPOER;
20 | this.agent = this.config.USERAGENT;
21 | this.invite = this.config.INVITE;
22 | this.logger = this.config.LOGGER;
23 | this.dev = this.config.DEV_ID;
24 | this.color = this.config.EMBED_COLOR;
25 | this.image = this.config.IMAGE;
26 | this.pikped_useragent = this.config.PIKPED_USERAGENT;
27 | this.shards_ready_webhook = this.config.SHARDS_READY_WEBHOOK;
28 | this.er_webhook = this.config.ER_WEBHOOK;
29 | this.main_support = this.config.MAIN_SUPPORT;
30 | this.botlistlog = this.config.BOTLISTLOG;
31 | this.waptap_cookie = this.config.WAPTAP_COOKIE;
32 | if (!this.token) this.token = this.config.TOKEN;
33 |
34 | process.on('unhandledRejection', error => console.log(error));
35 | process.on('uncaughtException', error => console.log(error));
36 |
37 | const client = this;
38 |
39 |
40 | ["slash", "premiums"].forEach(x => client[x] = new Collection());
41 | ["loadCommand", "loadEvent", "loadDatabase", "PremiumReader"].forEach(x => require(`./handlers/${x}`)(client));
42 |
43 | }
44 |
45 | get id() {
46 | return this.options.shards;
47 | }
48 | get count() {
49 | return this.options.shardCount;
50 | }
51 |
52 | connect() {
53 | return super.login(this.token);
54 | };
55 |
56 | };
57 | module.exports = MainClient;
--------------------------------------------------------------------------------
/events/guild/guildDelete.js:
--------------------------------------------------------------------------------
1 | const moment = require('moment');
2 | require("dotenv").config();
3 | const { red } = require("chalk")
4 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ChannelType, ActionRowBuilder, ButtonBuilder, ButtonStyle, WebhookClient } = require("discord.js");
5 | module.exports = async (client, guild) => {
6 | console.log(red(`The bot has been removed to a new server: ${guild.name} (id: ${guild.id}). This server has ${guild.memberCount} members.`));
7 | const logWebhook = new WebhookClient({ url: process.env.GUILD_LOGS })
8 |
9 | const embed = {
10 | title: 'SpicyFlix Removed',
11 | description: `Removed from **${guild.name}!**`,
12 | thumbnail: {
13 | url: guild.iconURL(),
14 | },
15 | fields: [
16 | {
17 | name: 'Guild Name',
18 | value: `${guild.name}`,
19 | inline: true,
20 | },
21 | {
22 | name: 'Date',
23 | value: ``,
24 | inline: true,
25 | },
26 | {
27 | name: 'Guild ID',
28 | value: `${guild.id}`,
29 | inline: true,
30 | },
31 | {
32 | name: 'Creating Date',
33 | value: `${moment.utc(guild.createdAt).format('DD/MMM/YYYY')}`,
34 | inline: true,
35 | },
36 | {
37 | name: 'Members',
38 | value: `${guild.memberCount}`,
39 | inline: true,
40 | },
41 | ],
42 | footer: {
43 | text: `Guild #${client.guilds.cache.size}`,
44 | },
45 | color: 0xfe875d
46 | };
47 |
48 | // Send the message to the log channel
49 | logWebhook.send({
50 | username: client.user.username,
51 | avatarURL: client.user.displayAvatarURL(),
52 | embeds: [embed],
53 | });
54 | }
--------------------------------------------------------------------------------
/Functions/others/randomsub.js:
--------------------------------------------------------------------------------
1 | //some cool subreddits, add more here if u want
2 | let randomsubredditGet = [
3 | "pussy",
4 | "PussyWedgie",
5 | "PussyFlashing",
6 | "gonewild",
7 | "RealGirls",
8 | "BustyPetite",
9 | "PetiteGoneWild",
10 | "cumsluts",
11 | "LegalTeens",
12 | "AsiansGoneWild",
13 | "nsfw_gifs",
14 | "tiktokthots",
15 | "rule34",
16 | "GirlsFinishingTheJob",
17 | "Amateur",
18 | "BiggerThanYouThought",
19 | "hentai",
20 | "porninfifteenseconds",
21 | "pawg",
22 | "LipsThatGrip",
23 | "ass",
24 | "Boobies",
25 | "nsfwcosplay",
26 | "girlsinyogapants",
27 | "curvy",
28 | "workgonewild",
29 | "AsianHotties",
30 | "bigasses",
31 | "gonewildcurvy",
32 | "asstastic",
33 | "thick",
34 | "GirlswithGlasses",
35 | "quiver",
36 | "whenitgoesin",
37 | "redheads",
38 | "WouldYouFuckMyWife",
39 | "fitgirls",
40 | "NSFWverifiedamateurs",
41 | "Hotchickswithtattoos",
42 | "theratio",
43 | "paag",
44 | "boobs",
45 | "facedownassup",
46 | "altgonewild",
47 | "tightdresses",
48 | "gonewildcouples",
49 | "Cuckold",
50 | "asshole",
51 | "bdsm",
52 | "bimbofetish",
53 | "LabiaGW",
54 | "AsianNSFW",
55 | "rileyreid",
56 | "DegradingHoles",
57 | "booty",
58 | "slutwife",
59 | "iwanttobeher",
60 | "Ifyouhadtopickone",
61 | "realmoms",
62 | "Breeding",
63 | "Nipples",
64 | "booty_queens",
65 | "BBW",
66 | "amazingtits",
67 | "DadWouldBeProud",
68 | "bikinis",
69 | "EngorgedVeinyBreasts",
70 | "HotMoms",
71 | "WomenBendingOver",
72 | "bigareolas",
73 | "feet",
74 | "NSFW_Social",
75 | "CumHentai",
76 | "slightcellulite",
77 | "hentaicaptions"
78 | ]
79 |
80 | function getRandomSubreddit() {
81 | const listedR = Math.floor(Math.random() * randomsubredditGet.length);
82 | return randomsubredditGet[listedR];
83 | }
84 |
85 | module.exports = getRandomSubreddit;
--------------------------------------------------------------------------------
/commands/Premium/Remove.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ApplicationCommandOptionType,
2 | ButtonBuilder, ButtonStyle } = require("discord.js");
3 | const Premium = require("../../settings/models/Premium.js")
4 | const Profile = require("../../settings/models/Profile.js")
5 | const moment = require('moment');
6 |
7 | module.exports = {
8 | name: ["remove-premium"],
9 | description: "remove premium to user (developer)",
10 | options: [
11 | {
12 | name: "user",
13 | description: "mention user to remove",
14 | required: true,
15 | type: ApplicationCommandOptionType.User,
16 | }
17 | ],
18 | run: async (interaction, client, language) => {
19 | await interaction.deferReply({ ephemeral: false });
20 |
21 | if (interaction.user.id != client.owner) return interaction.editReply({ content: `you cant use this command !`, ephemeral: false });
22 |
23 | const mentions = interaction.options.getUser("user");
24 |
25 | const db = await Premium.findOne({ Id: mentions.id });
26 |
27 | if (db.isPremium) {
28 | db.isPremium = false
29 | db.premium.redeemedBy = []
30 | db.premium.redeemedAt = null
31 | db.premium.expiresAt = null
32 | db.premium.plan = null
33 |
34 | const newUser = await db.save({ new: true }).catch(() => { })
35 | client.premiums.set(newUser.Id, newUser);
36 |
37 | const embed = new EmbedBuilder()
38 | .setDescription(`premium of ${mentions} have been removed !`)
39 | .setColor(client.color)
40 |
41 | interaction.editReply({ embeds: [embed] });
42 |
43 | } else {
44 | const embed = new EmbedBuilder()
45 | .setDescription(`premium already removed or we cant find user`)
46 | .setColor(client.color)
47 |
48 | interaction.editReply({ embeds: [embed] });
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/commands/General/Stats.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, PermissionsBitField, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle, AttachmentBuilder } = require("discord.js");
2 | module.exports = {
3 | name: ["stats"],
4 | description: "check bot stats",
5 | run: async (interaction, client) => {
6 |
7 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.SendMessages)) {
8 | return await
9 | interaction.editReply({
10 | content: `${interaction.user.username} I need this permissions to do this commands here (check permissions in this channel)\n\nPermissions\n'Send Messages'`,
11 | ephemeral: true
12 | })
13 | }
14 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ViewChannel)) {
15 | return await
16 | interaction.editReply({
17 | content: `${interaction.user.username} I need this permissions to do this commands here (check permissions in this channel)\n\nPermissions\n'View Channels'`,
18 | ephemeral: true
19 | })
20 | }
21 |
22 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.EmbedLinks)) {
23 | return await
24 | interaction.editReply({
25 | content: `${interaction.user.username} I need this permissions to do this commands here (check permissions in this channel)\n\nPermissions\n'Embed Links'`,
26 | ephemeral: true
27 | })
28 | }
29 |
30 |
31 | const embed = new EmbedBuilder()
32 | .setTitle('SpicyFlix Stats')
33 | .setDescription(`Guilds Count: ${client.guilds.cache.size} | Shards Count: ${client.count} | This guild is on shard: #${client.id}`)
34 | // .setImage(client.image)
35 | .setColor(client.color)
36 | return interaction.reply({
37 | embeds: [embed],
38 | })
39 |
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/commands/Premium/GuildProfile.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ApplicationCommandOptionType,
2 | ButtonBuilder, ButtonStyle } = require("discord.js");
3 | const Premium = require("../../settings/models/GPremium.js")
4 | const Profile = require("../../settings/models/GProfile.js")
5 | const moment = require('moment');
6 |
7 | module.exports = {
8 | name: ["guild-premium-stats"],
9 | description: "check your premium status",
10 | run: async (interaction, client, language) => {
11 | const user = client.premiums.get(interaction.guild.id)
12 | await interaction.deferReply({ ephemeral: false });
13 | const PremiumPlan = await Premium.findOne({ Id: interaction.guild.id })
14 | const expires = moment(PremiumPlan.premium.expiresAt).format('dddd, MMMM Do YYYY HH:mm:ss');
15 |
16 | const info = await Premium.findOne({ Id: interaction.guild.id });
17 | const timeLeft = moment.duration(info.premium.expiresAt - Date.now()).format("d [days], h [hours], m [minutes]");
18 | const profile = await Profile.findOne({ userId: interaction.guild.id });
19 |
20 | try {
21 | if (user && user.isPremium) {
22 | const embed = new EmbedBuilder()
23 | .setDescription(`**${interaction.user.username} your guild premium is active and your order is ${PremiumPlan.premium.plan}**\n\nyou can use your premium untill ${timeLeft}`)
24 | .setColor(client.color)
25 |
26 | return interaction.editReply({ embeds: [embed] });
27 |
28 | } else {
29 | const Premiumed = new EmbedBuilder()
30 | .setDescription(`your guild dont have permium`)
31 | .setColor(client.color)
32 |
33 | return interaction.editReply({ content: " ", embeds: [Premiumed] });
34 | }
35 | } catch (err) {
36 | console.log(err)
37 | interaction.editReply({ content: `we cant find your info please contact my [developer](${client.support}) to check your problem` })
38 | }
39 |
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/commands/Premium/Profile.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ApplicationCommandOptionType,
2 | ButtonBuilder, ButtonStyle } = require("discord.js");
3 | const Premium = require("../../settings/models/Premium.js")
4 | const Profile = require("../../settings/models/Profile.js")
5 | const moment = require('moment');
6 |
7 | module.exports = {
8 | name: ["my-redeem"],
9 | description: "check your premium status",
10 | run: async (interaction, client, language) => {
11 | const user = client.premiums.get(interaction.user.id)
12 | await interaction.deferReply({ ephemeral: false });
13 | const PremiumPlan = await Premium.findOne({ Id: interaction.user.id })
14 | const expires = moment(PremiumPlan.premium.expiresAt).format('dddd, MMMM Do YYYY HH:mm:ss');
15 |
16 | const info = await Premium.findOne({ Id: interaction.user.id });
17 | const timeLeft = moment.duration(info.premium.expiresAt - Date.now()).format("d [days], h [hours], m [minutes]");
18 | const profile = await Profile.findOne({ userId: interaction.user.id });
19 |
20 | try {
21 | if (user && user.isPremium) {
22 | const embed = new EmbedBuilder()
23 | .setDescription(`**${interaction.user.username} your premium is active and your order is ${PremiumPlan.premium.plan}**\n\nyou can use your premium untill ${timeLeft}`)
24 | .setColor(client.color)
25 |
26 | return interaction.editReply({ embeds: [embed] });
27 |
28 | } else {
29 | const Premiumed = new EmbedBuilder()
30 | .setDescription(`${interaction.user.username} you don't have premium !`)
31 | .setColor(client.color)
32 |
33 | return interaction.editReply({ content: " ", embeds: [Premiumed] });
34 | }
35 | } catch (err) {
36 | console.log(err)
37 | interaction.editReply({ content: `we cant find your info please contact my [developer](${client.support}) to check your problem` })
38 | }
39 |
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/commands/Configs/AutoVideoRemove.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField } = require("discord.js");
2 | const db = require("../../settings/models/AutoNudeSender");
3 |
4 | module.exports = {
5 | name: ["auto", "video", "remove"],
6 | description: "Remove auto video posting in your server",
7 | run: async (interaction, client) => {
8 | interaction.deferReply().then(async () => {
9 | if (!interaction.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
10 | const perm = new EmbedBuilder()
11 | .setDescription(`You dont have **Admin** permission to do this command, please check your premissions and try again`)
12 | .setColor(client.color)
13 | return await interaction.editReply({
14 | embeds: [perm],
15 | ephemeral: true
16 | })
17 | }
18 |
19 | const getinfo = await db.findOne({ guildId: interaction.guild.id }) // User: interaction.user.id
20 | const embed = new EmbedBuilder()
21 | .setDescription(`This guild (${interaction.guild.name}) dosent have any saved channel to delete if you think this was an error you can join my [support server](${client.support}) and ask about your question`)
22 | .setColor(client.color)
23 |
24 | if (!getinfo) return interaction.editReply({
25 | embeds: [embed]
26 | });
27 |
28 | await db.findOneAndDelete({
29 | guildId: interaction.guild.id,
30 | });
31 |
32 | await db.findOneAndDelete({
33 | guildId: interaction.guild.id,
34 | });
35 |
36 |
37 |
38 | const successEmbed = new EmbedBuilder()
39 | .setDescription(`Removed auto reddit system in this guild`)
40 | .setColor(client.color)
41 | .setFooter({ text: `done by ${interaction.user.username}` });
42 | await interaction.editReply({
43 | embeds: [successEmbed]
44 | });
45 | })
46 | }
47 | }
--------------------------------------------------------------------------------
/commands/Configs/RemoveAutoreddit.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField } = require("discord.js");
2 | const db = require("../../settings/models/AutoWebhookSender");
3 |
4 | module.exports = {
5 | name: ["auto", "reddit", "remove"],
6 | description: "Remove autonude reddit posting in your server",
7 | run: async (interaction, client) => {
8 | interaction.deferReply().then(async () => {
9 | if (!interaction.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
10 | const perm = new EmbedBuilder()
11 | .setDescription(`You dont have **Admin** permission to do this command, please check your premissions and try again`)
12 | .setColor(client.color)
13 | return await interaction.editReply({
14 | embeds: [perm],
15 | ephemeral: true
16 | })
17 | }
18 |
19 | const getinfo = await db.findOne({ guildId: interaction.guild.id }) // User: interaction.user.id
20 | const embed = new EmbedBuilder()
21 | .setDescription(`This guild (${interaction.guild.name}) dosent have any saved channel to delete if you think this was an error you can join my [support server](${client.support}) and ask about your question`)
22 | .setColor(client.color)
23 |
24 | if (!getinfo) return interaction.editReply({
25 | embeds: [embed]
26 | });
27 |
28 | await db.findOneAndDelete({
29 | guildId: interaction.guild.id,
30 | });
31 |
32 | await db.findOneAndDelete({
33 | guildId: interaction.guild.id,
34 | });
35 |
36 |
37 |
38 | const successEmbed = new EmbedBuilder()
39 | .setDescription(`Removed auto reddit system in this guild`)
40 | .setColor(client.color)
41 | .setFooter({ text: `done by ${interaction.user.username}` });
42 | await interaction.editReply({
43 | embeds: [successEmbed]
44 | });
45 | })
46 | }
47 | }
--------------------------------------------------------------------------------
/Functions/WebhookRedditSender.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoWebhookSender")
2 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ChannelType, WebhookClient } = require("discord.js");
3 | const getRandomSubreddit = require('./others/randomsub');
4 | module.exports = {
5 | webhook_reddit_sender: async function (client) {
6 | let randomSubreddit = getRandomSubreddit();
7 |
8 | let json = await fetch(`https://www.reddit.com/r/${randomSubreddit}/random/.json`, {
9 | method: 'GET',
10 | headers: {
11 | 'User-Agent': process.env.G_AGENT,
12 | 'Authorization': `Bearer `
13 | },
14 | })
15 | .then(r => r.json());
16 |
17 | let permalink = json[0].data.children[0].data.permalink;
18 | let posturl = `https://reddit.com${permalink}`;
19 | let postimage = json[0].data.children[0].data.url;
20 | let posttitle = json[0].data.children[0].data.title;
21 | let postup = json[0].data.children[0].data.ups;
22 | let postcomments = json[0].data.children[0].data.num_comments;
23 |
24 | try {
25 |
26 |
27 | const webhooks = await db.find();
28 |
29 | await Promise.all(webhooks.map(async (webhookData) => {
30 | const { guildId, channelId, webhook } = webhookData;
31 |
32 | const channel = await client.channels.fetch(channelId);
33 | const web = new WebhookClient({ url: webhook });
34 |
35 | try {
36 | await web.send({ content: `${randomSubreddit} • ${posttitle}\n👍 ${postup} | 📝 ${postcomments}\n${client.spoiler}${postimage}` })
37 | console.log(`[Auto Reddit] sended in ${channel.id} (${channel.name})`);
38 | } catch (error) {
39 | console.error(`[Auto Reddit] error cant send in ${webhook} | ${channel.name}:`, error);
40 |
41 | await db.findOneAndDelete({
42 | guildId: guildId,
43 | });
44 |
45 | const webhooklogger = new WebhookClient({ url: client.logger })
46 | // webhooklogger.send({
47 | // content: `${error}`
48 | // })
49 | }
50 |
51 | }));
52 | } catch (e) {
53 | console.log(e)
54 | }
55 | }
56 | }
--------------------------------------------------------------------------------
/commands/Premium/GuildRedeem.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ApplicationCommandOptionType,
2 | ButtonBuilder, ButtonStyle } = require("discord.js");
3 | const Redeem = require("../../settings/models/GRedeem");
4 | const Premium = require("../../settings/models/GPremium")
5 | const moment = require('moment');
6 |
7 | module.exports = {
8 | name: ["guild-redeem"],
9 | description: "active premium",
10 | options: [
11 | {
12 | name: "code",
13 | description: "enter premium code",
14 | required: true,
15 | type: ApplicationCommandOptionType.String,
16 | },
17 | ],
18 | run: async (interaction, client, user, language) => {
19 | await interaction.deferReply({ ephemeral: false });
20 |
21 | const input = interaction.options.getString("code");
22 |
23 | let member = await Premium.findOne({ Id: interaction.guild.id })
24 |
25 | if (member && member.isPremium) {
26 | const embed = new EmbedBuilder()
27 | .setColor(client.color)
28 | .setDescription(`This guild premium was actived`)
29 | return interaction.editReply({ embeds: [embed] });
30 | }
31 |
32 |
33 | const premium = await Redeem.findOne({ code: input.toUpperCase() });
34 | if (premium) {
35 | const expires = moment(premium.expiresAt).format('dddd, MMMM YYYY HH:mm:ss')
36 |
37 | member.isPremium = true
38 | member.premium.redeemedBy.push(interaction.user)
39 | member.premium.redeemedAt = Date.now()
40 | member.premium.expiresAt = premium.expiresAt
41 | member.premium.plan = premium.plan
42 |
43 | member = await member.save({ new: true });
44 | client.premiums.set(interaction.guild.id, member);
45 | await premium.deleteOne();
46 |
47 | const embed = new EmbedBuilder()
48 | .setDescription(`${interaction.user.username} your premium have been actived for ${expires} in your guild !\n\nthanks for using SpicyFlix`)
49 | .setColor(client.color)
50 |
51 | return interaction.editReply({ embeds: [embed] });
52 | } else {
53 | const embed = new EmbedBuilder()
54 | .setColor(client.color)
55 | .setDescription(`your entered code is not vailed code ! contact [developers](${client.support}) to check your problem`)
56 | return interaction.editReply({ embeds: [embed] })
57 | }
58 |
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/commands/Premium/Redeem.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ApplicationCommandOptionType,
2 | ButtonBuilder, ButtonStyle } = require("discord.js");
3 | const Redeem = require("../../settings/models/Redeem");
4 | const Premium = require("../../settings/models/Premium")
5 | const moment = require('moment');
6 |
7 | module.exports = {
8 | name: ["redeem"],
9 | description: "active premium",
10 | options: [
11 | {
12 | name: "code",
13 | description: "enter premium code",
14 | required: true,
15 | type: ApplicationCommandOptionType.String,
16 | },
17 | ],
18 | run: async (interaction, client, user, language) => {
19 | await interaction.deferReply({ ephemeral: false });
20 |
21 | const input = interaction.options.getString("code");
22 |
23 | let member = await Premium.findOne({ Id: interaction.user.id })
24 |
25 | if (member && member.isPremium) {
26 | const embed = new EmbedBuilder()
27 | .setColor(client.color)
28 | .setDescription(`your premium was active you dont need active your premium once again !`)
29 | return interaction.editReply({ embeds: [embed] });
30 | }
31 |
32 |
33 | const premium = await Redeem.findOne({ code: input.toUpperCase() });
34 | if (premium) {
35 | const expires = moment(premium.expiresAt).format('dddd, MMMM YYYY HH:mm:ss')
36 |
37 | member.isPremium = true
38 | member.premium.redeemedBy.push(interaction.user)
39 | member.premium.redeemedAt = Date.now()
40 | member.premium.expiresAt = premium.expiresAt
41 | member.premium.plan = premium.plan
42 |
43 | member = await member.save({ new: true });
44 | client.premiums.set(interaction.user.id, member);
45 | await premium.deleteOne();
46 |
47 | const embed = new EmbedBuilder()
48 | .setDescription(`${interaction.user.username} your premium have been actived for ${expires} !\n\nthanks for using SpicyFlix`)
49 | .setColor(client.color)
50 |
51 | return interaction.editReply({ embeds: [embed] });
52 | } else {
53 | const embed = new EmbedBuilder()
54 | .setColor(client.color)
55 | .setDescription(`your entered code is not vailed code ! contact [developers](${client.support}) to check your problem`)
56 | return interaction.editReply({ embeds: [embed] })
57 | }
58 |
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/tos.md:
--------------------------------------------------------------------------------
1 | SpicyFlix Discord Bot - Terms of Service (TOS)
2 |
3 | Welcome to SpicyFlix! Before you proceed to add SpicyFlix to your Discord server, please carefully read and agree to the following Terms of Service (TOS).
4 | By adding the SpicyFlix bot to your server, you acknowledge and accept these terms.
5 |
6 |
7 | **Age Restriction:**
8 |
9 | SpicyFlix is intended for users who are 18 years of age or older. If you are under 18, you are not permitted to use SpicyFlix. By using the bot, you confirm that you meet the age requirement.
10 |
11 |
12 | **Data Collection:**
13 |
14 | SpicyFlix stores and processes certain data to enhance its performance and fulfill its intended functions. This includes storing channel IDs for various performance and functional needs. We do not store personal information about users.
15 |
16 |
17 | **Information Usage:**
18 |
19 | The channel IDs stored by SpicyFlix are solely for the purpose of optimizing the bot's performance within your server. We do not use this information for any other purposes, and we do not share it with third parties.
20 |
21 |
22 | **Compliance with Discord Terms:**
23 |
24 | By adding SpicyFlix to your server, you agree to comply with Discord's Terms of Service (TOS) and Community Guidelines. Any violation of Discord's policies may result in the removal of SpicyFlix from your server.
25 |
26 |
27 | **Bot Performance:**
28 |
29 | SpicyFlix is designed to provide entertainment and media-related services.
30 | While we strive to maintain a high level of service, we do not guarantee uninterrupted or error-free operation.
31 | We may perform updates and maintenance to ensure optimal performance.
32 |
33 |
34 | **Modifications to TOS:**
35 |
36 | SpicyFlix reserves the right to update or modify these Terms of Service at any time. Users will be notified of changes, and continued use of the bot after modifications constitute acceptance of the updated terms.
37 |
38 |
39 | **Disclaimer of Liability:**
40 |
41 | SpicyFlix and its developers are not responsible for any direct or indirect damages resulting from the use of the bot. Users are responsible for their own actions and interactions within Discord servers.
42 |
43 |
44 | **Termination of Service:**
45 |
46 | SpicyFlix reserves the right to terminate its services or cease support for the bot at any time, with or without notice
47 | By adding SpicyFlix to your server, you confirm that you have read, understood, and agreed to these Terms of Service.
48 | If you do not agree with any part of these terms, please refrain from adding SpicyFlix to your server.
49 | For any questions or concerns regarding these terms, please contact us at https://discord.gg/cABpZrfJHC.
50 |
51 |
52 | Thank you for using SpicyFlix!
53 |
--------------------------------------------------------------------------------
/commands/Premium/Generate.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ApplicationCommandOptionType,
2 | ButtonBuilder, ButtonStyle } = require("discord.js");
3 | const voucher_codes = require('voucher-code-generator');
4 | const Redeem = require("../../settings/models/Redeem");
5 | const moment = require('moment');
6 |
7 | module.exports = {
8 | name: ["code"],
9 | description: "premium code (developer)",
10 | options: [
11 | {
12 | name: "type",
13 | description: "type",
14 | required: true,
15 | type: ApplicationCommandOptionType.String,
16 | },
17 | {
18 | name: "num",
19 | description: "num",
20 | required: false,
21 | type: ApplicationCommandOptionType.String,
22 | }
23 | ],
24 | run: async (interaction, client, user, language) => {
25 | await interaction.deferReply({ ephemeral: false });
26 |
27 | if (interaction.user.id != client.owner) return interaction.editReply({ content: `you cant use this command !`, ephemeral: false });
28 |
29 | const name = interaction.options.getString("type");
30 | const camount = interaction.options.getString("num");
31 |
32 | let codes = [];
33 |
34 | const plan = name;
35 | const plans = ['daily', 'weekly', 'monthly', 'yearly'];
36 |
37 | if (!plans.includes(name))
38 | return interaction.editReply({
39 | content: `not corrected plans ${plans.join(', ')}`, ephemeral: false
40 | })
41 |
42 | let time;
43 | if (plan === 'daily') time = Date.now() + 86400000;
44 | if (plan === 'weekly') time = Date.now() + 86400000 * 7;
45 | if (plan === 'monthly') time = Date.now() + 86400000 * 30;
46 | if (plan === 'yearly') time = Date.now() + 86400000 * 365;
47 |
48 | let amount = camount;
49 | if (!amount) amount = 1;
50 |
51 | for (var i = 0; i < amount; i++) {
52 | const codePremium = voucher_codes.generate({
53 | prefix: "spicyflix-",
54 | postfix: "-2024",
55 | pattern: '####-####-####'
56 | })
57 | const code = codePremium.toString().toUpperCase()
58 | const find = await Redeem.findOne({ code: code })
59 |
60 | if (!find) {
61 | Redeem.create({
62 | code: code,
63 | plan: plan,
64 | expiresAt: time
65 | }),
66 | codes.push(`${i + 1} - ${code}`)
67 | }
68 | }
69 |
70 | const embed = new EmbedBuilder()
71 | .setColor(client.color)
72 | .setDescription(`premium codes created\n\n${codes.join('\n')}\n\n this code will expires at ${moment(time).format('dddd, MMMM Do YYYY')} [${plan}]`)
73 | interaction.editReply({ embeds: [embed] })
74 |
75 |
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/commands/Premium/GuildGenerate.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ApplicationCommandOptionType,
2 | ButtonBuilder, ButtonStyle } = require("discord.js");
3 | const voucher_codes = require('voucher-code-generator');
4 | const Redeem = require("../../settings/models/GRedeem");
5 | const moment = require('moment');
6 |
7 | module.exports = {
8 | name: ["guild-code"],
9 | description: "premium code (developer)",
10 | options: [
11 | {
12 | name: "type",
13 | description: "type",
14 | required: true,
15 | type: ApplicationCommandOptionType.String,
16 | },
17 | {
18 | name: "num",
19 | description: "num",
20 | required: false,
21 | type: ApplicationCommandOptionType.String,
22 | }
23 | ],
24 | run: async (interaction, client, user, language) => {
25 | await interaction.deferReply({ ephemeral: false });
26 |
27 | if (interaction.user.id != client.owner) return interaction.editReply({ content: `you cant use this command !`, ephemeral: false });
28 |
29 | const name = interaction.options.getString("type");
30 | const camount = interaction.options.getString("num");
31 |
32 | let codes = [];
33 |
34 | const plan = name;
35 | const plans = ['daily', 'weekly', 'monthly', 'yearly'];
36 |
37 | if (!plans.includes(name))
38 | return interaction.editReply({
39 | content: `not corrected plans ${plans.join(', ')}`, ephemeral: false
40 | })
41 |
42 | let time;
43 | if (plan === 'daily') time = Date.now() + 86400000;
44 | if (plan === 'weekly') time = Date.now() + 86400000 * 7;
45 | if (plan === 'monthly') time = Date.now() + 86400000 * 30;
46 | if (plan === 'yearly') time = Date.now() + 86400000 * 365;
47 |
48 | let amount = camount;
49 | if (!amount) amount = 1;
50 |
51 | for (var i = 0; i < amount; i++) {
52 | const codePremium = voucher_codes.generate({
53 | prefix: "spicyflix-guild-",
54 | postfix: "-2024",
55 | pattern: '####-####-####'
56 | })
57 | const code = codePremium.toString().toUpperCase()
58 | const find = await Redeem.findOne({ code: code })
59 |
60 | if (!find) {
61 | Redeem.create({
62 | code: code,
63 | plan: plan,
64 | expiresAt: time
65 | }),
66 | codes.push(`${i + 1} - ${code}`)
67 | }
68 | }
69 |
70 | const embed = new EmbedBuilder()
71 | .setColor(client.color)
72 | .setDescription(`premium codes created\n\n${codes.join('\n')}\n\n this code will expires at ${moment(time).format('dddd, MMMM Do YYYY')} [${plan}]`)
73 | interaction.editReply({ embeds: [embed] })
74 |
75 |
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/events/guild/guildCreate.js:
--------------------------------------------------------------------------------
1 | const moment = require('moment');
2 | const { green } = require('chalk')
3 | require("dotenv").config();
4 | const { EmbedBuilder, ApplicationCommandOptionType, WebhookClient, PermissionsBitField, ChannelType, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
5 | module.exports = async (client, guild) => {
6 | console.log(green(`The bot has been added to a new server: ${guild.name} (id: ${guild.id}). This server has ${guild.memberCount} members.`));
7 | const logWebhook = new WebhookClient({ url: process.env.GUILD_LOGS })
8 | const guilds = await client.guilds.cache.size
9 | const totalG = guilds
10 | const guildOwner = await guild.fetchOwner();
11 | const embed = {
12 | title: 'SpicyFlix Added',
13 | description: `**Thanks for inviting me to ${guild.name}**!`,
14 | thumbnail: {
15 | url: guild.iconURL(),
16 | },
17 | fields: [
18 | {
19 | name: 'Guild Owner',
20 | value: `${guildOwner.user.tag} [\`${guild.ownerId}\`]`,
21 | inline: true,
22 | },
23 | {
24 | name: 'Guild Name',
25 | value: `${guild.name}`,
26 | inline: true,
27 | },
28 | {
29 | name: 'Date',
30 | value: ``,
31 | inline: true,
32 | },
33 | {
34 | name: 'Guild ID',
35 | value: `${guild.id}`,
36 | inline: true,
37 | },
38 | {
39 | name: 'Creating Date',
40 | value: `${moment.utc(guild.createdAt).format('DD/MMM/YYYY')}`,
41 | inline: true,
42 | },
43 | {
44 | name: 'Members',
45 | value: `${guild.memberCount}`,
46 | inline: true,
47 | },
48 | ],
49 | footer: {
50 | text: `Guild #${totalG}`,
51 | },
52 | color: 0xfe875d
53 | };
54 |
55 | // Send the message to the log channel
56 | logWebhook.send({
57 | username: client.user.username,
58 | avatarURL: client.user.displayAvatarURL(),
59 | embeds: [embed],
60 | });
61 |
62 | // Send a DM to the guild owner
63 | const ownerDM = await guildOwner.user.createDM();
64 | const bemola = new EmbedBuilder()
65 | .setTitle(`:wave: ${guildOwner.user.tag} thanks for invite SpicyFlix to your server`)
66 | .setDescription(`you can join my official support server to get **4k content 🫦, fresh 😈, top-quality 1080 / 720 videos of nature and many more 🍑 every day whcih we update in server**`)
67 | .setColor(client.color)
68 | await ownerDM.send({
69 | content: `Turning up the heat with sizzling adult content! 🔥🌶️ Join the fiery fun now! ${client.support}\nOur Community ${client.main_support}`,
70 | embeds: [bemola]
71 | });
72 | };
--------------------------------------------------------------------------------
/Functions/OnlyTikApi.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoNudeSender")
2 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
3 | const { onlytik_requester } = require("./others/onlytik_requester");
4 | const request = require("request")
5 | require("dotenv").config();
6 |
7 | module.exports = {
8 | webhook_onlytik_sender: async function (client) {
9 |
10 | const url = `https://onlytik.com/api/new-videos`;
11 | const headers = {
12 | 'User-Agent': process.env.G_AGENT,
13 | };
14 |
15 |
16 | onlytik_requester(url, headers, async (error, responseData) => {
17 | if (error) {
18 | console.error('Error:', error.message);
19 | return;
20 | }
21 | try {
22 | const webhooks = await db.find();
23 |
24 | const file = new AttachmentBuilder()
25 | .setFile(responseData[Math.floor(Math.random() * responseData.length)].url)
26 | .setName('SpicyFlix.mp4')
27 |
28 |
29 | await Promise.all(webhooks.map(async (webhookData) => {
30 | const { channelId, webhook } = webhookData;
31 |
32 | const web = new WebhookClient({ url: webhook });
33 |
34 | try {
35 | await web.send({ files: [file] }).then(message => {
36 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
37 | console.log("Attachment Links:", attachmentLinks);
38 | const urlObject = new URL(attachmentLinks);
39 | const baseURL = urlObject.origin + urlObject.pathname;
40 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
41 | const re = emojis[Math.floor(Math.random() * emojis.length)];
42 | const btns = new ActionRowBuilder()
43 | .addComponents(
44 | new ButtonBuilder()
45 | .setLabel("Download")
46 | .setURL(baseURL)
47 | .setEmoji(`${re}`)
48 | .setStyle(ButtonStyle.Link));
49 |
50 | web.send({ components: [btns] })
51 | })
52 | console.log(`[ONLYTIK] sended in guilds !`);
53 | } catch (error) {
54 | console.error(`[ONLYTIK] error cant send:`, error);
55 | // const webhooklogger = new WebhookClient({ url: client.logger })
56 | // webhooklogger.send({
57 | // content: `${error}`
58 | // })
59 | }
60 |
61 | }))
62 | } catch (e) {
63 | console.log(e)
64 | }
65 | });
66 | }
67 |
68 | }
--------------------------------------------------------------------------------
/Functions/PinPornSender.js:
--------------------------------------------------------------------------------
1 | //main auto nude sender
2 | const db = require("../settings/models/AutoNudeSender")
3 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
4 | const { pinporn_requester } = require("./others/pinporn_requester");
5 | const request = require("request")
6 | const pinporncategory = require("./others/pinporn_categories")
7 | const randomSubreddit = pinporncategory();
8 | require("dotenv").config();
9 |
10 | module.exports = {
11 | webhook_pinporn_sender: async function (client) {
12 |
13 | const url = `https://pin.porn/api/videoInfo/?tag_id=${randomSubreddit.id}/&ipp=${Math.floor(Math.random() * 45) + 1}&from_page=${Math.floor(Math.random() * 20) + 1}`;
14 | const headers = {
15 | 'User-Agent': process.env.pinporn_agent,
16 | };
17 |
18 |
19 | pinporn_requester(url, headers, async (error, responseData) => {
20 | if (error) {
21 | console.error('Error:', error.message);
22 | return;
23 | }
24 | // console.log('Response Data:', responseData);
25 |
26 | try {
27 | const webhooks = await db.find();
28 |
29 | const file = new AttachmentBuilder()
30 | .setFile(responseData.data[0].link)
31 | .setName('SpicyFlix.mp4')
32 |
33 | const embed = new EmbedBuilder()
34 | .setDescription(responseData.data[0].title)
35 | .setColor(process.env.EMBED_COLOR)
36 |
37 |
38 | await Promise.all(webhooks.map(async (webhookData) => {
39 | const { channelId, webhook } = webhookData;
40 |
41 | const web = new WebhookClient({ url: webhook });
42 |
43 | try {
44 | await web.send({ embeds: [embed], files: [file] }).then(message => {
45 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
46 | console.log("Attachment Links:", attachmentLinks);
47 | const urlObject = new URL(attachmentLinks);
48 | const baseURL = urlObject.origin + urlObject.pathname;
49 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
50 | const re = emojis[Math.floor(Math.random() * emojis.length)];
51 | const btns = new ActionRowBuilder()
52 | .addComponents(
53 | new ButtonBuilder()
54 | .setLabel("Download")
55 | .setURL(baseURL)
56 | .setEmoji(`${re}`)
57 | .setStyle(ButtonStyle.Link));
58 |
59 | web.send({ components: [btns] })
60 | })
61 | console.log(`[PINPORN] sended in guilds !`);
62 | } catch (error) {
63 | console.error(`[PINPORN] error cant send:`, error);
64 | // const webhooklogger = new WebhookClient({ url: client.logger })
65 | // webhooklogger.send({
66 | // content: `${error}`
67 | // })
68 | }
69 |
70 | }));
71 | } catch (e) {
72 | console.log(e)
73 | }
74 | });
75 | }
76 |
77 | }
--------------------------------------------------------------------------------
/events/guild/interactionCreate.js:
--------------------------------------------------------------------------------
1 | const { PermissionsBitField, WebhookClient } = require("discord.js");
2 | const chalk = require('chalk');
3 | const Premium = require("../../settings/models/Premium")
4 |
5 | module.exports = async (client, interaction) => {
6 |
7 | if (interaction.isCommand || interaction.isContextMenuCommand || interaction.isModalSubmit || interaction.isChatInputCommand) {
8 | if (!interaction.guild) return;
9 |
10 | await client.createDatabase(interaction);
11 |
12 | const user = interaction.client.premiums.get(interaction.user.id);
13 | await client.createPremium(interaction, user);
14 |
15 | const guildss = interaction.client.premiums.get(interaction.guild.id);
16 | await client.CreateGuildPremium(interaction, guildss)
17 |
18 | let subCommandName = "";
19 | try {
20 | subCommandName = interaction.options.getSubcommand();
21 | } catch { };
22 | let subCommandGroupName = "";
23 | try {
24 | subCommandGroupName = interaction.options.getSubcommandGroup();
25 | } catch { };
26 |
27 | const command = client.slash.find(command => {
28 | switch (command.name.length) {
29 | case 1: return command.name[0] == interaction.commandName;
30 | case 2: return command.name[0] == interaction.commandName && command.name[1] == subCommandName;
31 | case 3: return command.name[0] == interaction.commandName && command.name[1] == subCommandGroupName && command.name[2] == subCommandName;
32 | }
33 | });
34 |
35 | if (!command) return;
36 |
37 |
38 | const msg_cmd = [
39 | `[COMMAND] ${command.name[0]}`,
40 | `${command.name[1] || ""}`,
41 | `${command.name[2] || ""}`,
42 | `used by ${interaction.user.tag} from ${interaction.guild.name} (${interaction.guild.id})`,
43 | ]
44 |
45 | console.log(chalk.bgRed(`${msg_cmd.join(" ")}`));
46 |
47 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.SendMessages)) return interaction.reply({
48 | content: `${interaction.user.username} I need this permissions to do this commands here (check permissions in this channel)\n\nPermissions\n'Send Messages'`,
49 | ephemeral: true
50 | });
51 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ViewChannel))
52 | return interaction.reply({
53 | content: `${interaction.user.username} I need this permissions to do this commands here (check permissions in this channel)\n\nPermissions\n'View Channels'`,
54 | ephemeral: true
55 | });
56 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.EmbedLinks))
57 | return interaction.reply({
58 | content: `${interaction.user.username} I need this permissions to do this commands here (check permissions in this channel)\n\nPermissions\n'Embed Links'`,
59 | ephemeral: true
60 | });
61 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.UseExternalEmojis))
62 | return interaction.reply({
63 | content: `${interaction.user.username} I need this permissions to do this commands here (check permissions in this channel)\n\nPermissions\n'Use External Emojies'`,
64 | ephemeral: true
65 | });
66 |
67 | if (command) {
68 | try {
69 | command.run(interaction, client);
70 | } catch (error) {
71 | console.log(error)
72 | const web = new WebhookClient({ url: client.er_webhook });
73 | web.send({
74 | content: `Interaction Error\n\n${error}`
75 | });
76 | await interaction.reply({ content: `something went wrong [support server](${client.support_server})`, ephemeral: true });
77 | }
78 | }
79 | }
80 |
81 |
82 | }
--------------------------------------------------------------------------------
/Functions/Tiktok_f_auto.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoFeeds")
2 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
3 | const { fikfud_requester } = require("./others/FiqFuq_requester");
4 | require("dotenv").config();
5 | const alertedChannelsData = require("../alertedChannels.json")
6 | const fs = require('fs');
7 |
8 | //this function premium
9 | module.exports = {
10 | webhook_tiktok_fiqfuq_auto_requester: async function (client) {
11 | try {
12 | const webhooks = await db.find();
13 |
14 | await Promise.all(webhooks.map(async (webhookData) => {
15 | const { channelId, webhook, contenttype, guildId } = webhookData;
16 | const url = 'https://fiqfuq.com/api';
17 | const headers = {
18 | 'User-Agent': `${process.env.USERAGENT}`,
19 | };
20 | let group = ''
21 | let discover = 'tiktok'
22 | let a_type = 'discover'
23 | let rn_s = Math.floor(Math.random() * 5) + 1
24 |
25 | fikfud_requester(url, group, discover, a_type, rn_s, headers, async (error, responseData) => {
26 | if (error) {
27 | console.error('Error:', error.message);
28 | return;
29 | }
30 |
31 | const channel = await client.channels.fetch(channelId);
32 | const web = new WebhookClient({ url: webhook });
33 |
34 | try {
35 | const ran = Math.floor(Math.random() * responseData.length)
36 | const mainf = new AttachmentBuilder(responseData[ran].video_url, 'SpicyFlix.mp4')
37 |
38 | const embed = new EmbedBuilder()
39 | .setDescription(`${responseData[ran].description ?? "none"}`)
40 | .setColor(client.color)
41 |
42 | await web.send({
43 | content: "**🔥️ Nsfw TikTok**",
44 | embeds: [embed], files: [mainf]
45 | }).then(message => {
46 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
47 | console.log("Attachment Links:", attachmentLinks);
48 | const urlObject = new URL(attachmentLinks);
49 | const baseURL = urlObject.origin + urlObject.pathname;
50 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
51 | const re = emojis[Math.floor(Math.random() * emojis.length)];
52 | const btns = new ActionRowBuilder()
53 | .addComponents(
54 | new ButtonBuilder()
55 | .setLabel("Download")
56 | .setURL(baseURL)
57 | .setEmoji(`${re}`)
58 | .setStyle(ButtonStyle.Link));
59 |
60 | web.send({ components: [btns] })
61 | })
62 | .catch(error => {
63 | console.error("Error sending message:", error);
64 | });
65 | console.log(`[FIQFUQ] sended in ${channel.id} (${channel.name})`);
66 | } catch (error) {
67 | console.error(`[FIQFUQ] error cant send in ${channel.name}:`, error);
68 | const webhooklogger = new WebhookClient({ url: client.logger })
69 | // webhooklogger.send({
70 | // content: `${error}`
71 | // })
72 | }
73 | })
74 | }));
75 | } catch (e) {
76 | console.log(e)
77 | }
78 | }
79 | }
--------------------------------------------------------------------------------
/commands/Configs/SetAutoNude.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ChannelType } = require("discord.js");
2 | const db = require("../../settings/models/AutoNudeSender");
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 |
5 | module.exports = {
6 | name: ["auto", "video", "set"],
7 | description: "Set auto videos posting in your channel",
8 | options: [
9 | {
10 | name: 'channel',
11 | description: 'select your channel to set auto video posting',
12 | type: ApplicationCommandOptionType.Channel,
13 | channelTypes: [ChannelType.GuildText],
14 | required: true,
15 | }],
16 | run: async (interaction, client) => {
17 | interaction.deferReply().then(async () => {
18 | const channel = interaction.options.getChannel("channel");
19 |
20 | if (!interaction.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
21 | const perm = new EmbedBuilder()
22 | .setDescription(`You dont have **Admin** permission to do this command, please check your premissions and try again`)
23 | .setColor(client.color)
24 |
25 | return await interaction.editReply({
26 | embeds: [perm],
27 | ephemeral: true
28 | })
29 | }
30 |
31 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageWebhooks)) {
32 | const perm = new EmbedBuilder()
33 | .setDescription(`I dont have **Manage Webhooks** permission to do this command, please check my premissions and try again`)
34 | .setColor(client.color)
35 |
36 | return await
37 | interaction.editReply({
38 | embeds: [perm],
39 | ephemeral: true
40 | })
41 | }
42 |
43 | if (!channel.nsfw) return interaction.editReply({ embeds: [defaultNSFW(interaction)] })
44 |
45 | const joinSys = await db.findOne({
46 | guildId: interaction.guild.id,
47 | });
48 |
49 |
50 | if (!joinSys) {
51 | const CreatedWebhook = await channel.createWebhook({
52 | name: 'SpicyFlix',
53 | avatar: 'https://cdn.discordapp.com/avatars/1185495860008730745/a3283d2aed77b9ff305fb30d205ea6e2.png?size=1024',
54 | });
55 |
56 | const webhookUrl = CreatedWebhook.url;
57 |
58 |
59 | joinChannel = new db({
60 | guildId: interaction.guild.id,
61 | channelId: channel.id,
62 | webhook: webhookUrl,
63 | })
64 | await joinChannel.save().catch((err) => console.log(err));
65 | const successEmbed = new EmbedBuilder()
66 | .setDescription(`successfully created auto video posting in your guild you will get random content every ~15 mins in your channel`)
67 | .setColor(client.color);
68 |
69 | await interaction.editReply({
70 | embeds: [successEmbed],
71 | });
72 | } else if (joinSys) {
73 |
74 | const CreatedWebhook = await channel.createWebhook({
75 | name: 'SpicyFlix',
76 | avatar: 'https://cdn.discordapp.com/avatars/1185495860008730745/a3283d2aed77b9ff305fb30d205ea6e2.png?size=1024',
77 | });
78 |
79 | const webhookUrl = CreatedWebhook.url;
80 | console.log(webhookUrl)
81 | await db.findOneAndUpdate(
82 | { guildId: interaction.guild.id },
83 | { channelId: channel.id, webhook: webhookUrl },
84 | ).exec();
85 |
86 | const successEmbed = new EmbedBuilder()
87 | .setDescription(`you have updated your channel or webhook to get random videos`)
88 | .setColor(client.color);
89 |
90 | await interaction.editReply({
91 | embeds: [successEmbed],
92 | });
93 | }
94 | })
95 |
96 | }
97 | }
--------------------------------------------------------------------------------
/commands/Configs/SetAutoReddit.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ChannelType } = require("discord.js");
2 | const db = require("../../settings/models/AutoWebhookSender");
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 |
5 | module.exports = {
6 | name: ["auto", "reddit", "set"],
7 | description: "Set autonude reddit posting in your server",
8 | options: [
9 | {
10 | name: 'channel',
11 | description: 'select your channel to set autonude posting reddit',
12 | type: ApplicationCommandOptionType.Channel,
13 | channelTypes: [ChannelType.GuildText],
14 | required: true,
15 | }],
16 | run: async (interaction, client, user) => {
17 | interaction.deferReply().then(async () => {
18 |
19 | const channel = interaction.options.getChannel('channel')
20 |
21 | if (!interaction.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
22 | const perm = new EmbedBuilder()
23 | .setDescription(`You dont have **Admin** permission to do this command, please check your premissions and try again`)
24 | .setColor(client.color)
25 | return await interaction.editReply({
26 | embeds: [perm],
27 | ephemeral: true
28 | })
29 | }
30 |
31 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageWebhooks)) {
32 | const perm = new EmbedBuilder()
33 | .setDescription(`I dont have **Manage Webhooks** permission to do this command, please check my premissions and try again`)
34 | .setColor(client.color)
35 | return await
36 | interaction.editReply({
37 | embeds: [perm],
38 | ephemeral: true
39 | })
40 | }
41 |
42 | if (!channel.nsfw) return interaction.editReply({ embeds: [defaultNSFW(interaction)] })
43 |
44 | const joinSys = await db.findOne({
45 | guildId: interaction.guild.id,
46 | });
47 |
48 |
49 | if (!joinSys) {
50 | const CreatedWebhook = await channel.createWebhook({
51 | name: 'SpicyFlix',
52 | avatar: 'https://cdn.discordapp.com/avatars/1185495860008730745/a3283d2aed77b9ff305fb30d205ea6e2.png?size=1024',
53 | });
54 |
55 | const webhookUrl = CreatedWebhook.url;
56 |
57 |
58 | joinChannel = new db({
59 | guildId: interaction.guild.id,
60 | channelId: channel.id,
61 | webhook: webhookUrl,
62 | })
63 | await joinChannel.save().catch((err) => console.log(err));
64 | const successEmbed = new EmbedBuilder()
65 | .setDescription(`successfully created auto reddit posting in your guild you will get random content every ~2 mins in your channel`)
66 | .setColor(client.color);
67 |
68 | await interaction.editReply({
69 | embeds: [successEmbed],
70 | });
71 | } else if (joinSys) {
72 |
73 | const CreatedWebhook = await channel.createWebhook({
74 | name: 'SpicyFlix',
75 | avatar: 'https://cdn.discordapp.com/avatars/1185495860008730745/a3283d2aed77b9ff305fb30d205ea6e2.png?size=1024',
76 | });
77 |
78 | const webhookUrl = CreatedWebhook.url;
79 | console.log(webhookUrl)
80 | await db.findOneAndUpdate(
81 | { guildId: interaction.guild.id },
82 | { channelId: channel.id, webhook: webhookUrl },
83 | ).exec();
84 |
85 | const successEmbed = new EmbedBuilder()
86 | .setDescription(`you have updated your channel or webhook to get random auto reddit posts`)
87 | .setColor(client.color);
88 |
89 | await interaction.editReply({
90 | embeds: [successEmbed],
91 | });
92 | }
93 | })
94 |
95 | }
96 | }
--------------------------------------------------------------------------------
/Functions/waptap_tiktok_sender.js:
--------------------------------------------------------------------------------
1 | //free auto tiktok (waptap) sender
2 | const db = require("../settings/models/AutoNudeSender")
3 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
4 | const { request_site } = require("./others/one_requester");
5 | const ranwaptappers = require("./others/waptap_tiktok_categories")
6 | const rangot = ranwaptappers();
7 | require("dotenv").config();
8 |
9 | module.exports = {
10 | webhook_tiktok_waptap: async function (client) {
11 | //check waptap to have more changes here if you need
12 | let ran = Math.floor(Math.random() * 4) + 1
13 | const url = `https://api1.waptap.com/v1/user/${rangot.name}/media?page=${ran}`;
14 | const headers = {
15 | 'Accept': "*/*",
16 | 'Accept-Encoding': 'deflate',
17 | 'Accept-Language': 'en-US,en;q=0.5',
18 | 'Alt-Used': 'api1.waptap.com',
19 | 'Connection': 'keep-alive',
20 | 'Cookie': client.waptap_cookie,
21 | 'Host': 'api1.waptap.com',
22 | 'Sec-Fetch-Dest': 'document',
23 | 'Sec-Fetch-Mode': 'navigate',
24 | 'Sec-Fetch-Site': 'none',
25 | 'Sec-Fetch-User': '?1',
26 | 'Upgrade-Insecure-Requests': '1',
27 | 'User-Agent': process.env.WAPTAP_AGENT,
28 | };
29 |
30 | request_site(url, headers, async (error, responseData) => {
31 | if (error) {
32 | console.error('Error:', error.message);
33 | return;
34 | }
35 |
36 | const ri = Math.floor(Math.random() * responseData.data.items.length);
37 | const ranres = responseData.data.items[ri];
38 |
39 | try {
40 | const webhooks = await db.find();
41 |
42 | const file = new AttachmentBuilder()
43 | if (ranres.file.endsWith(".mp4")) {
44 | file.setFile(ranres.file)
45 | .setName("SpicyFlix.mp4");
46 | } else {
47 | file.setFile(ranres.file)
48 | .setName("SpicyFlix.png");
49 | }
50 |
51 | const embed = new EmbedBuilder()
52 | .setDescription(`${ranres.description} || "none"`)
53 | .setColor(client.color)
54 |
55 |
56 | await Promise.all(webhooks.map(async (webhookData) => {
57 | const { channelId, webhook } = webhookData;
58 |
59 | const web = new WebhookClient({ url: webhook });
60 |
61 | try {
62 | await web.send({ embeds: [embed], files: [file] }).then(message => {
63 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
64 | console.log("Attachment Links:", attachmentLinks);
65 | const urlObject = new URL(attachmentLinks);
66 | const baseURL = urlObject.origin + urlObject.pathname;
67 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
68 | const re = emojis[Math.floor(Math.random() * emojis.length)];
69 | const btns = new ActionRowBuilder()
70 | .addComponents(
71 | new ButtonBuilder()
72 | .setLabel("Download")
73 | .setURL(baseURL)
74 | .setEmoji(`${re}`)
75 | .setStyle(ButtonStyle.Link));
76 |
77 | web.send({ components: [btns] })
78 | })
79 | console.log(`[WAPTAP TIKTOK] sended in guilds !`);
80 | } catch (error) {
81 | console.error(`[WAPTAP TIKTOK] error cant send:`, error);
82 | // const webhooklogger = new WebhookClient({ url: client.logger })
83 | // webhooklogger.send({
84 | // content: `${error}`
85 | // })
86 | }
87 |
88 | }));
89 | } catch (e) {
90 | console.log(e)
91 | }
92 |
93 |
94 |
95 |
96 | });
97 | }
98 |
99 | }
--------------------------------------------------------------------------------
/Functions/LeftandRightSender.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoLeftRight")
2 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ChannelType, WebhookClient } = require("discord.js");
3 | const alertedChannelsData = require("../alertedChannels.json")
4 | const fs = require('fs');
5 |
6 | //this function is premium
7 | module.exports = {
8 | webhook_leftandright_reddit_sender: async function (client) {
9 | let randomSubreddit = 'Ifyouhadtopickone';
10 | let json = await fetch(`https://www.reddit.com/r/${randomSubreddit}/random/.json`, {
11 | method: 'GET',
12 | headers: {
13 | 'User-Agent': process.env.G_AGENT,
14 | 'Authorization': `Bearer `// i think reddit shit down some times so i add this
15 | },
16 | })
17 | .then(r => r.json());
18 |
19 | let permalink = json[0].data.children[0].data.permalink;
20 | let posturl = `https://reddit.com${permalink}`;
21 | let postimage = json[0].data.children[0].data.url;
22 | let posttitle = json[0].data.children[0].data.title;
23 | let postup = json[0].data.children[0].data.ups;
24 | let postcomments = json[0].data.children[0].data.num_comments;
25 |
26 |
27 | try {
28 | const webhooks = await db.find();
29 |
30 | await Promise.all(webhooks.map(async (webhookData) => {
31 | const { channelId, webhook, guildId } = webhookData;
32 | const gotguild = await client.guilds.fetch(guildId)
33 | const guildss = client.premiums.get(gotguild.id)
34 |
35 | if (guildss && guildss.isPremium) {
36 |
37 | const channel = await client.channels.fetch(channelId);
38 | const web = new WebhookClient({ url: webhook });
39 | try {
40 | //use a shit spoiler to cover images or files
41 | const message = await web.send({ content: `${client.spoiler}${postimage}` }).then(async sendedmessage => {
42 | const targetChannel = channel
43 | await targetChannel.messages.fetch({ message: sendedmessage.id }).then((r) => {
44 | try {
45 | const lemoji = '👈';
46 | const remoji = '👉';
47 | const icant = '🥵';
48 |
49 | r.react(lemoji)
50 | r.react(remoji)
51 | r.react(icant)
52 | r.react("❤️")
53 | } catch (e) { console.log(`cant add reaction to some channel with id ${sendedmessage.id} and channel id :${targetChannel} er was ${e}`) }
54 | })
55 | })
56 | console.log(`[Auto Left right Reddit] sended in ${channel.id} (${channel.name})`);
57 | } catch (error) {
58 | console.error(`[Auto left right Reddit] error cant send in ${channel.name}:`, error);
59 | const webhooklogger = new WebhookClient({ url: client.logger })
60 | // webhooklogger.send({
61 | // content: `${error}`
62 | // })
63 | }
64 | } else {
65 | const ch = await client.channels.fetch(channelId)
66 | if (alertedChannelsData.alertedChannels.includes(ch.id)) {
67 | console.log('we have sended alert already')
68 | } else {
69 | // Send the alert message
70 | const embed = new EmbedBuilder()
71 | .setTitle("Your premium subscription has expired")
72 | .setColor(client.color)
73 | .setImage(client.image)
74 | .setDescription(`Premium features are currently disabled. To renew premium status and regain access to premium features, please join our [support server](${client.support})`)
75 | ch.send({ embeds: [embed] })
76 |
77 |
78 | alertedChannelsData.alertedChannels.push(ch.id);
79 | fs.writeFileSync('./alertedChannels.json', JSON.stringify(alertedChannelsData, null, 2));
80 | }
81 | }
82 | }));
83 | } catch (e) {
84 | console.log(e)
85 | }
86 | }
87 | }
--------------------------------------------------------------------------------
/Functions/AutoVideoSender.js:
--------------------------------------------------------------------------------
1 | //main auto nude sender
2 | const db = require("../settings/models/AutoNudeSender")
3 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
4 | const { request_site } = require("./others/one_requester");
5 | const request = require("request")
6 | require("dotenv").config();
7 |
8 | module.exports = {
9 | webhook_video_sender: async function (client) {
10 |
11 | const url = `https://api.hotscope.tv/videos/sort?sort=-date&page=${Math.floor(Math.random() * 20) + 1}`;
12 | const headers = {
13 | 'User-Agent': process.env.HOTSCOPE_AGENT,
14 | };
15 |
16 | request_site(url, headers, async (error, responseData) => {
17 | if (error) {
18 | console.error('Error:', error.message);
19 | return;
20 | }
21 |
22 | const ri = Math.floor(Math.random() * responseData.length);
23 | const randomId = responseData[ri].id;
24 | // console.log(randomId)
25 |
26 | const new_url = `https://api.hotscope.tv/videos/video/${randomId}`;
27 | const new_headers = {
28 | 'User-Agent': process.env.HOTSCOPE_AGENT,
29 |
30 | };
31 |
32 | const new_options = {
33 | json: true,
34 | jsonReplacer: true,
35 | url: new_url,
36 | headers: new_headers
37 | };
38 |
39 | request(new_options, async (error, response, body) => {
40 | if (!error && response.statusCode === 200) {
41 | // console.log(body.video)
42 | try {
43 | const webhooks = await db.find();
44 |
45 | const file = new AttachmentBuilder()
46 | .setFile(body.video)
47 | .setName("SpicyFlix.mp4")
48 |
49 | const embed = new EmbedBuilder()
50 | .setDescription(`${body.title}`)
51 | .setColor("ca2c2b")
52 |
53 |
54 | await Promise.all(webhooks.map(async (webhookData) => {
55 | const { channelId, webhook } = webhookData;
56 |
57 | const web = new WebhookClient({ url: webhook });
58 |
59 | try {
60 | await web.send({ embeds: [embed], files: [file] }).then(message => {
61 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
62 | console.log("Attachment Links:", attachmentLinks);
63 | const urlObject = new URL(attachmentLinks);
64 | const baseURL = urlObject.origin + urlObject.pathname;
65 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
66 | const re = emojis[Math.floor(Math.random() * emojis.length)];
67 | const btns = new ActionRowBuilder()
68 | .addComponents(
69 | new ButtonBuilder()
70 | .setLabel("Download")
71 | .setURL(baseURL)
72 | .setEmoji(`${re}`)
73 | .setStyle(ButtonStyle.Link));
74 |
75 | web.send({ components: [btns] })
76 | })
77 | console.log(`[Auto Video] sended in guilds !`);
78 | } catch (error) {
79 | console.error(`[Auto Video] error cant send:`, error);
80 | // const webhooklogger = new WebhookClient({ url: client.logger })
81 | // webhooklogger.send({
82 | // content: `${error}`
83 | // })
84 | }
85 |
86 | }));
87 | } catch (e) {
88 | console.log(e)
89 | }
90 |
91 | } else {
92 | console.error('Error:', error);
93 | console.log('Response status code:', response.statusCode);
94 | }
95 | });
96 |
97 |
98 | });
99 | }
100 |
101 | }
--------------------------------------------------------------------------------
/commands/PremiumPosters/setleft-right.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ApplicationCommandOptionType, PermissionsBitField, ChannelType } = require("discord.js");
2 | const db = require("../../settings/models/AutoLeftRight");
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 | const { defaultPremium } = require("../../Functions/defaultPremiumer");
5 |
6 | module.exports = {
7 | name: ["auto", "left-right", "set"],
8 | description: "Set auto left or right posting in your channel",
9 | options: [
10 | {
11 | name: 'channel',
12 | description: 'select your channel to set auto video posting',
13 | type: ApplicationCommandOptionType.Channel,
14 | channelTypes: [ChannelType.GuildText],
15 | required: true,
16 | }],
17 | run: async (interaction, client) => {
18 | interaction.deferReply().then(async () => {
19 | const channel = interaction.options.getChannel("channel");
20 |
21 | if (!interaction.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
22 | const perm = new EmbedBuilder()
23 | .setDescription(`You dont have **Admin** permission to do this command, please check your premissions and try again`)
24 | .setColor(client.color)
25 | return await interaction.editReply({
26 | embeds: [perm],
27 | ephemeral: true
28 | })
29 | }
30 |
31 | if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageWebhooks)) {
32 | const perm = new EmbedBuilder()
33 | .setDescription(`I dont have **Manage Webhooks** permission to do this command, please check my premissions and try again`)
34 | .setColor(client.color)
35 | return await
36 | interaction.editReply({
37 | embeds: [perm],
38 | ephemeral: true
39 | })
40 | }
41 |
42 |
43 | if (!channel.nsfw) return interaction.editReply({ embeds: [defaultNSFW(interaction)] })
44 |
45 | const guildss = client.premiums.get(interaction.guild.id)
46 |
47 | if (guildss && guildss.isPremium) {
48 |
49 | const joinSys = await db.findOne({
50 | guildId: interaction.guild.id,
51 | });
52 |
53 |
54 | if (!joinSys) {
55 | const CreatedWebhook = await channel.createWebhook({
56 | name: 'SpicyFlix',
57 | avatar: 'https://cdn.discordapp.com/avatars/1185495860008730745/a3283d2aed77b9ff305fb30d205ea6e2.png?size=1024',
58 | });
59 |
60 | const webhookUrl = CreatedWebhook.url;
61 |
62 |
63 | joinChannel = new db({
64 | guildId: interaction.guild.id,
65 | channelId: channel.id,
66 | webhook: webhookUrl,
67 | })
68 | await joinChannel.save().catch((err) => console.log(err));
69 | const successEmbed = new EmbedBuilder()
70 | .setDescription(`successfully created auto left or right posting in your guild you will get random content every ~1 hour in your channel`)
71 | .setColor(client.color);
72 |
73 | await interaction.editReply({
74 | embeds: [successEmbed],
75 | });
76 | } else if (joinSys) {
77 |
78 | const CreatedWebhook = await channel.createWebhook({
79 | name: 'SpicyFlix',
80 | avatar: 'https://cdn.discordapp.com/avatars/1185495860008730745/a3283d2aed77b9ff305fb30d205ea6e2.png?size=1024',
81 | });
82 |
83 | const webhookUrl = CreatedWebhook.url;
84 | console.log(webhookUrl)
85 | await db.findOneAndUpdate(
86 | { guildId: interaction.guild.id },
87 | { channelId: channel.id, webhook: webhookUrl },
88 | ).exec();
89 |
90 | const successEmbed = new EmbedBuilder()
91 | .setDescription(`you have updated your channel or webhook to get left or right content`)
92 | .setColor(client.color);
93 |
94 | await interaction.editReply({
95 | embeds: [successEmbed],
96 | });
97 | }
98 | } else {
99 | return interaction.editReply({ embeds: [defaultPremium(interaction)] });
100 | }
101 | })
102 | }
103 | }
--------------------------------------------------------------------------------
/Functions/FiqFuqAutoSender.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoNudeSender")
2 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
3 | const { fikfud_requester } = require("./others/FiqFuq_requester");
4 | require("dotenv").config();
5 |
6 | module.exports = {
7 | webhook_fiqfuq_auto_requester: async function (client) {
8 | //check thi site if you want add more responses here
9 | const g1 = ['breastsucking', 'CollegeAmateurs', 'alteredbuttholes', 'IndianFetish']
10 | const g2 = ['aa_cups', 'SchoolgirlsXXX', 'THEGOLDSTANDARD', 'blowjobsandwich',]
11 | const g3 = ['FacialFun', 'stripgirls', 'IndianPorn', 'facesitting']
12 | const g4 = ['wifewantstoplay', 'slutsofsnapchat', 'slingbikini', 'naughtywives']
13 | const g5 = ['homesex', 'fitgirls', 'TitfuckBlowjob', 'FrogButt']
14 | const g6 = ['collegesluts', 'fingerinbutt', 'Orgasms', 'Kyutty']
15 | const g7 = ['B_Cups', 'lactation', 'AmateurDeepthroat', 'femdomgonewild']
16 | const g8 = ['WedgieGirls', 'FanslyFriends', 'petite', 'AnnaBellPeaks']
17 | const g9 = ['pelfie', 'Gonewild18', 'asstastic', 'fingerinbutt']
18 | const g10 = ['WedgieGirls', 'FanslyFriends', 'petite', 'AnnaBellPeaks']
19 | const g11 = ['amateur_threesomes', 'TheUnderbun', 'justthejewels', 'vagina']
20 | const g12 = ['bimbocumsluts', 'PerfectPussies', 'fuckdoll', 'collegesluts']
21 |
22 | const groups = [g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12];
23 | const ri = Math.floor(Math.random() * groups.length);
24 | let a = groups[ri];
25 | let b = a.join(',');
26 | try {
27 | const webhooks = await db.find();
28 |
29 | await Promise.all(webhooks.map(async (webhookData) => {
30 | const { channelId, webhook, contenttype, guildId } = webhookData;
31 | const url = 'https://fiqfuq.com/api';
32 | const headers = {
33 | 'User-Agent': `${process.env.USERAGENT}`,
34 | };
35 | let group = b
36 | let discover = 0
37 | let a_type = 'homepage'
38 | let rn_s = Math.floor(Math.random() * 10) + 1
39 |
40 | fikfud_requester(url, group, discover, a_type, rn_s, headers, async (error, responseData) => {
41 | if (error) {
42 | console.error('Error:', error.message);
43 | return;
44 | }
45 |
46 | const channel = await client.channels.fetch(channelId);
47 | const web = new WebhookClient({ url: webhook });
48 |
49 | try {
50 | const ran = Math.floor(Math.random() * responseData.length)
51 | const mainf = new AttachmentBuilder(responseData[ran].video_url, 'SpicyFlix.mp4')
52 |
53 | const embed = new EmbedBuilder()
54 | .setDescription(`${responseData[ran].description ?? "none"}`)
55 | .setColor(client.color)
56 |
57 | await web.send({ embeds: [embed], files: [mainf] }).then(message => {
58 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
59 | console.log("Attachment Links:", attachmentLinks);
60 | const urlObject = new URL(attachmentLinks);
61 | const baseURL = urlObject.origin + urlObject.pathname;
62 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
63 | const re = emojis[Math.floor(Math.random() * emojis.length)];
64 | const btns = new ActionRowBuilder()
65 | .addComponents(
66 | new ButtonBuilder()
67 | .setLabel("Download")
68 | .setURL(baseURL)
69 | .setEmoji(`${re}`)
70 | .setStyle(ButtonStyle.Link));
71 |
72 | web.send({ components: [btns] })
73 | })
74 | .catch(error => {
75 | console.error("Error sending message:", error);
76 | });
77 | console.log(`[FIQFUQ] sended in ${channel.id} (${channel.name})`);
78 | } catch (error) {
79 | console.error(`[FIQFUQ] error cant send in ${channel.name}:`, error);
80 | const webhooklogger = new WebhookClient({ url: client.logger })
81 | // webhooklogger.send({
82 | // content: `${error}`
83 | // })
84 | }
85 | })
86 | }));
87 | } catch (e) {
88 | console.log(e)
89 | }
90 | }
91 | }
--------------------------------------------------------------------------------
/Functions/PremiumXfollowPoster.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoFeeds")
2 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
3 | const { request_site } = require("./others/one_requester");
4 | require("dotenv").config();
5 | const alertedChannelsData = require("../alertedChannels.json")
6 | const fs = require('fs');
7 |
8 | //this function is premium
9 | module.exports = {
10 | premium_webhook_auto_xfollow_sender: async function (client) {
11 | try {
12 | const webhooks = await db.find();
13 |
14 | await Promise.all(webhooks.map(async (webhookData) => {
15 | const { channelId, webhook, contenttype, guildId } = webhookData;
16 | const gotguild = await client.guilds.fetch(guildId)
17 | const guildss = client.premiums.get(gotguild.id)
18 | if (guildss && guildss.isPremium) {
19 |
20 | const randomNumber = Math.floor(Math.random() * 23) + 1;
21 | const page = Math.floor(Math.random() * 12) + 1;
22 |
23 | const url = `https://www.xfollow.com/api/v1/post/tag/${contenttype}?genders=cf&limit=${randomNumber}&page=${page}`
24 | const headers = {
25 | 'User-Agent': `${process.env.USERAGENT}`,
26 | }
27 |
28 | request_site(url, headers, async (error, responseData) => {
29 | if (error) {
30 | console.error('Error:', error.message);
31 | return;
32 | }
33 |
34 | const MapTheAPi = Math.floor(Math.random() * responseData.length);
35 | const ranfile = responseData[MapTheAPi].post.media[0].url;
36 |
37 |
38 | const channel = await client.channels.fetch(channelId);
39 | const web = new WebhookClient({ url: webhook });
40 |
41 | try {
42 | const files = new AttachmentBuilder(ranfile, 'SpicyFlix.mp4')
43 |
44 | const embed = new EmbedBuilder()
45 | .setDescription(responseData[MapTheAPi].post.text || "don't have description")
46 | .setColor(client.color)
47 |
48 | await web.send({ embeds: [embed], files: [files] }).then(message => {
49 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
50 | console.log("Attachment Links:", attachmentLinks);
51 | const urlObject = new URL(attachmentLinks);
52 | const baseURL = urlObject.origin + urlObject.pathname;
53 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
54 | const re = emojis[Math.floor(Math.random() * emojis.length)];
55 | const btns = new ActionRowBuilder()
56 | .addComponents(
57 | new ButtonBuilder()
58 | .setLabel("Download")
59 | .setURL(baseURL)
60 | .setEmoji(`${re}`)
61 | .setStyle(ButtonStyle.Link));
62 |
63 | web.send({ components: [btns] })
64 | })
65 | .catch(error => {
66 | console.error("Error sending message:", error);
67 | });
68 | console.log(`[PREMIUM XFOLLOW] sended in ${channel.id} (${channel.name})`);
69 | } catch (error) {
70 | console.error(`[PREMIUM XFOLLOW] error cant send in ${channel.name}:`, error);
71 | const webhooklogger = new WebhookClient({ url: client.logger })
72 | // webhooklogger.send({
73 | // content: `${error}`
74 | // })
75 | }
76 | })
77 | } else {
78 | const ch = await client.channels.fetch(channelId)
79 | if (alertedChannelsData.alertedChannels.includes(ch.id)) {
80 | console.log('we have sended alert already')
81 | } else {
82 | // Send the alert message
83 | const embed = new EmbedBuilder()
84 | .setTitle("Your premium subscription has expired")
85 | .setColor(client.color)
86 | .setImage(client.image)
87 | .setDescription(`Premium features are currently disabled. To renew premium status and regain access to premium features, please join our [support server](${client.support})`)
88 | ch.send({ embeds: [embed] })
89 |
90 |
91 | alertedChannelsData.alertedChannels.push(ch.id);
92 | fs.writeFileSync('./alertedChannels.json', JSON.stringify(alertedChannelsData, null, 2));
93 | }
94 | }
95 | }));
96 | } catch (e) {
97 | console.log(e)
98 | }
99 | }
100 | }
--------------------------------------------------------------------------------
/events/client/ready.js:
--------------------------------------------------------------------------------
1 | const { green, white } = require('chalk');
2 | const Premium = require("../../settings/models/Premium")
3 | const gPremium = require("../../settings/models/GPremium")
4 | const { functions_runner } = require("../../Functions/others/Functionsrunner.js")
5 | const { webhook_fiqfuq_auto_requester } = require("../../Functions/FiqFuqAutoSender.js")
6 | const { webhook_reddit_sender } = require("../../Functions/WebhookRedditSender.js") //reddit
7 | const { webhook_video_sender } = require("../../Functions/AutoVideoSender.js") // video
8 | const { webhook_pinporn_sender } = require("../../Functions/PinPornSender.js") // video 2
9 | const { webhook_saved_sender } = require("../../Functions/AutoRandomSavedSender.js") //saved video
10 | const { webhook_onlytik_sender } = require("../../Functions/OnlyTikApi.js") //onlytik
11 | const { webhook_auto_feed_sender } = require("../../Functions/AutoFeedsSender.js")//premium
12 | const { webhook_tiktok_fiqfuq_auto_requester } = require("../../Functions/Tiktok_f_auto.js")//prmium
13 | const { webhook_leftandright_reddit_sender } = require("../../Functions/LeftandRightSender.js") //left and right premium
14 | const { webhook_tiktok_waptap } = require("../../Functions/waptap_tiktok_sender.js") //free tiktok
15 | const { premium_webhook_auto_xfollow_sender } = require("../../Functions/PremiumXfollowPoster.js") //premium
16 | const { botlistme_requester } = require("../../Functions/BotLists/botlist.me.js") //bot list: botlist.me
17 | //
18 | const BotlistMeClient = require('botlist.me.js');
19 | //
20 |
21 | const { botlistme_hasvoted } = require("../../Functions/BotLists/hasvoted.botlist.me.js")
22 | //doc: https://crontab.guru/examples.html
23 | require("dotenv").config();
24 | const { EmbedBuilder, PermissionsBitField, WebhookClient } = require("discord.js")
25 | var cron = require('node-cron');
26 |
27 | module.exports = async (client) => {
28 | console.log(white('[') + green('SpaceFlix') + white('] ') + green(`${client.guilds.cache.size}`) + white(` Guilds`));
29 | console.log(white('[') + green('INFO') + white('] ') + green(`${client.user.tag} (${client.user.id})`) + white(` is Ready!`));
30 |
31 |
32 | //update guild and users premium
33 | const users = await Premium.find();
34 | for (let user of users) {
35 | client.premiums.set(user.Id, user);
36 | }
37 |
38 | const guildss = await gPremium.find();
39 | for (let user of guildss) {
40 | client.premiums.set(user.Id, user);
41 | }
42 |
43 |
44 |
45 | const functions = [ //free functions
46 | webhook_video_sender,
47 | webhook_pinporn_sender,
48 | webhook_saved_sender,
49 | webhook_fiqfuq_auto_requester,
50 | webhook_tiktok_waptap,
51 | webhook_onlytik_sender
52 | ];
53 |
54 | const pref = [ //premium functions
55 | webhook_tiktok_fiqfuq_auto_requester,
56 | webhook_auto_feed_sender,
57 | premium_webhook_auto_xfollow_sender
58 | ]
59 | cron.schedule('*/15 * * * *', async () => {
60 | const randomFunction = functions_runner(functions);
61 | randomFunction(client);
62 | })
63 |
64 | cron.schedule('0 * * * *', async () => {
65 | const rf = functions_runner(pref);
66 | rf(client);
67 | })//premium random functions
68 |
69 | cron.schedule('*/3 * * * *', async () => {
70 | webhook_reddit_sender(client)
71 | })
72 |
73 | cron.schedule('0 * * * *', async () => {
74 | webhook_leftandright_reddit_sender(client)
75 | })//premium reddit
76 |
77 | setInterval(() => {
78 | // `/help | ${client.guilds.cache.size} Guilds`,
79 | const activities = [
80 | `/help | ${client.guilds.cache.size} Guilds`,
81 | `/tiktok | ${client.guilds.cache.size} Guilds`,
82 | `/reddit | ${client.guilds.cache.size} Guilds`,
83 | `Turning up the heat with sizzling adult content! 🔥🌶️ Join the fiery fun now!`
84 | ]
85 | client.user.setPresence({
86 | activities: [{ name: `${activities[Math.floor(Math.random() * activities.length)]}`, type: 0 }],
87 | status: 'online',
88 | });
89 | }, 5 * 1000 * 60)
90 |
91 | if (process.env.BOLISTME) {
92 | cron.schedule('0 */3 * * *', async () => {
93 | try {
94 | botlistme_requester(client.guilds.cache.size, client.count, client.user.id,
95 | async (error, responseData, response) => {
96 | if (!error | response.statusCode === 200) {
97 | console.log("updated to botlist.me", response.body)
98 | const web = new WebhookClient({ url: client.botlistlog });
99 | web.send({
100 | content: `BotList: botlist.me posted status (${response.statusCode})`
101 | });
102 | } else {
103 | const web = new WebhookClient({ url: client.er_webhook });
104 | web.send({
105 | content: `BotList: botlist.me | ${error}`
106 | });
107 | }
108 | })
109 | } catch (er) {
110 | console.log(er)
111 | const web = new WebhookClient({ url: client.er_webhook });
112 | web.send({
113 | content: `BotList: botlist.me | ${er}`
114 | });
115 | }
116 | })
117 | const botlistme = new BotlistMeClient(process.env.BOTLISTMETOKEN, { webhookPort: 3000, webhookAuth: 'Jende@123' });
118 |
119 | botlistme.webhook.on('ready', hook => {
120 | console.log(`Webhook running at http://${hook.hostname}:${hook.port}${hook.path}`);
121 | });
122 |
123 | //running the shit
124 | botlistme.webhook.on('vote', vote => {
125 | console.log(`User ${vote.user} just voted!`);
126 | });
127 | }
128 | };
129 |
--------------------------------------------------------------------------------
/Functions/AutoFeedsSender.js:
--------------------------------------------------------------------------------
1 | const db = require("../settings/models/AutoFeeds")
2 | const { EmbedBuilder, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, PermissionsBitField, ChannelType, WebhookClient, AttachmentBuilder } = require("discord.js");
3 | const { pikped_requester } = require("./others/pikped_requester");
4 | require("dotenv").config();
5 | const alertedChannelsData = require("../alertedChannels.json")
6 | const fs = require('fs');
7 |
8 | //this function is premium
9 | module.exports = {
10 | webhook_auto_feed_sender: async function (client) {
11 | try {
12 | const webhooks = await db.find();
13 |
14 | await Promise.all(webhooks.map(async (webhookData) => {
15 | const { channelId, webhook, contenttype, guildId } = webhookData;
16 | const gotguild = await client.guilds.fetch(guildId)
17 | const guildss = client.premiums.get(gotguild.id)
18 |
19 | if (guildss && guildss.isPremium) {
20 | //use specific content type that setted for each guild
21 | // console.log(contenttype)
22 | let ran = Math.floor(Math.random() * 11) + 1
23 | const url = `https://api.pikped.com/api/tagList?page_size=10&page=${ran}&tags=${contenttype}`
24 | const headers = {
25 | "Accept": "*/*",
26 | "Accept-Encoding": "deflate",
27 | "Accept-Language": "en-US,en;q=0.5",
28 | "Connection": "keep-alive",
29 | "Host": "api.pikped.com",
30 | "Origin": "https://www.pikped.com",
31 | "Referer": "https://www.pikped.com/",
32 | "Sec-Fetch-Dest": "empty",
33 | "Sec-Fetch-Mode": "cors",
34 | "Sec-Fetch-Site": "same-site",
35 | "TE": "trailers",
36 | "User-Agent": client.pikped_useragent,
37 | "User-Identify": "null"
38 | }
39 |
40 |
41 | pikped_requester(url, headers, async (error, responseData) => {
42 | if (error) {
43 | console.error('Error:', error.message);
44 | return;
45 | }
46 |
47 | const ri = Math.floor(Math.random() * responseData.data.contents.length);
48 | const randomUsername = responseData.data.contents[ri];
49 | // console.log(randomUsername)
50 |
51 |
52 | const channel = await client.channels.fetch(channelId);
53 | const web = new WebhookClient({ url: webhook });
54 |
55 | try {
56 |
57 | const mainf = new AttachmentBuilder()
58 | .setFile(randomUsername.hd)
59 | .setName('SpicyFlix.mp4')
60 |
61 | const embed = new EmbedBuilder()
62 | .setDescription(randomUsername.description ?? "dont have")
63 | .setColor(client.color)
64 |
65 | await web.send({ embeds: [embed], files: [mainf] }).then(message => {
66 | const attachmentLinks = message.attachments.map(attachment => attachment.url);
67 | console.log("Attachment Links:", attachmentLinks);
68 | const urlObject = new URL(attachmentLinks);
69 | const baseURL = urlObject.origin + urlObject.pathname;
70 | const emojis = ["😈", "🌶️", "❤️", "🔥"];
71 | const re = emojis[Math.floor(Math.random() * emojis.length)];
72 | const btns = new ActionRowBuilder()
73 | .addComponents(
74 | new ButtonBuilder()
75 | .setLabel("Download")
76 | .setURL(baseURL)
77 | .setEmoji(`${re}`)
78 | .setStyle(ButtonStyle.Link));
79 |
80 | web.send({ components: [btns] })
81 | })
82 | .catch(error => {
83 | console.error("Error sending message:", error);
84 | });
85 | console.log(`[PREMIUM PIKPED] sended in ${channel.id} (${channel.name})`);
86 | } catch (error) {
87 | console.error(`[PREMIUM PIKPED] error cant send in ${channel.name}:`, error);
88 | const webhooklogger = new WebhookClient({ url: client.logger })
89 | // webhooklogger.send({
90 | // content: `${error}`
91 | // })
92 | }
93 | })
94 | } else {
95 | const ch = await client.channels.fetch(channelId)
96 | if (alertedChannelsData.alertedChannels.includes(ch.id)) {
97 | console.log('we have sended alert already')
98 | } else {
99 | // Send the alert message
100 | const embed = new EmbedBuilder()
101 | .setTitle("Your premium subscription has expired")
102 | .setColor(client.color)
103 | .setImage(client.image)
104 | .setDescription(`Premium features are currently disabled. To renew premium status and regain access to premium features, please join our [support server](${client.support})`)
105 | ch.send({ embeds: [embed] })
106 |
107 |
108 | alertedChannelsData.alertedChannels.push(ch.id);
109 | fs.writeFileSync('./alertedChannels.json', JSON.stringify(alertedChannelsData, null, 2));
110 | }
111 | }
112 | }));
113 | } catch (e) {
114 | console.log(e)
115 | }
116 | }
117 | }
--------------------------------------------------------------------------------
/commands/Reddit/Cum.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const get_res = require('../../Functions/reddit_cmd_subs/Cum');
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 | require("dotenv").config();
5 |
6 | module.exports = {
7 | name: ["reddit", "cum"],
8 | description: "get random cum porn",
9 | run: async (interaction, client, user, language) => {
10 | await interaction.deferReply({ ephemeral: false });
11 |
12 | if (!interaction.channel.nsfw) {
13 | interaction.reply({ embeds: [defaultNSFW(interaction)] })
14 | } else {
15 | try {
16 | let rs = get_res();
17 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
18 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
19 | method: 'GET',
20 | headers: {
21 | 'User-Agent': process.env.REDDIT_AGENT,
22 | 'Authorization': `Bearer `
23 | },
24 | })
25 | .then(r => r.json());
26 | let permalink = json[0].data.children[0].data.permalink;
27 | let posturl = `https://reddit.com${permalink}`;
28 | let postimage = json[0].data.children[0].data.url;
29 | let posttitle = json[0].data.children[0].data.title;
30 | let postup = json[0].data.children[0].data.ups;
31 | let postcomments = json[0].data.children[0].data.num_comments;
32 |
33 |
34 | const row = new ActionRowBuilder()
35 | .addComponents(
36 | new ButtonBuilder()
37 | .setCustomId(`reddit-cum`)
38 | // .setLabel("")
39 | .setEmoji('<:remoji:1152729404145930281>')
40 | .setStyle(ButtonStyle.Secondary)
41 | )
42 |
43 | interaction.editReply({
44 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
45 | components: [row]
46 | })
47 | const filter = i => i.customId === `reddit-cum`
48 |
49 | const collector = interaction.channel.createMessageComponentCollector({
50 | filter,
51 | time: 60000 * 5
52 | });
53 | try {
54 | collector.on('collect', async i => {
55 | if (i.message.interaction.user.id !== interaction.user.id) {
56 | return;
57 | }
58 | try {
59 | let rs = get_res();
60 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
61 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
62 | method: 'GET',
63 | headers: {
64 | 'User-Agent': process.env.REDDIT_AGENT,
65 | 'Authorization': `Bearer `
66 | },
67 | })
68 | .then(r => r.json());
69 | let permalink = json[0].data.children[0].data.permalink;
70 | let posturl = `https://reddit.com${permalink}`;
71 | let postimage = json[0].data.children[0].data.url;
72 | let posttitle = json[0].data.children[0].data.title;
73 | let postup = json[0].data.children[0].data.ups;
74 | let postcomments = json[0].data.children[0].data.num_comments;
75 |
76 | await i.update({
77 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
78 | components: [row],
79 | fetchReply: true
80 | })
81 | } catch (e) {
82 | console.log(e)
83 | await interaction.update({ fetchReply: true })
84 | }
85 | })
86 |
87 | collector.on('end', async (collected, reason) => { //time out
88 | if (reason === 'time') {
89 | const row = new ActionRowBuilder()
90 | .addComponents(
91 | new ButtonBuilder()
92 | .setCustomId(`reddit-cum`)
93 | // .setLabel("")
94 | .setEmoji('<:remoji:1152729404145930281>')
95 | .setStyle(ButtonStyle.Secondary)
96 | .setDisabled(true)
97 | )
98 |
99 | interaction.editReply({ components: [row] })
100 | }
101 | });
102 | } catch (e) {
103 | console.log(e)
104 |
105 | const apioff = new EmbedBuilder()
106 | .setDescription(`something went wrong [support](${client.support}) to get support about this error`)
107 | .setColor(client.color)
108 |
109 | interaction.editReply({
110 | embeds: [apioff],
111 | // files: [],
112 | // content: "",
113 | // ephemeral: true
114 | })
115 | }
116 | } catch (err) {
117 | console.log(err);
118 | const support = client.support_server
119 | const apioff = new EmbedBuilder()
120 | .setDescription(`Oops! our client is limited and cant send request to Reddit\n\n[Support Server](${client.support})`)
121 | .setColor(client.color)
122 | interaction.editReply({
123 | embeds: [apioff]
124 | })
125 | }
126 | }
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/commands/Reddit/Ass.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const get_res = require('../../Functions/reddit_cmd_subs/Ass');
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 | require("dotenv").config();
5 |
6 | module.exports = {
7 | name: ["reddit", "ass"],
8 | description: "get random ass porn",
9 | run: async (interaction, client, user, language) => {
10 | await interaction.deferReply({ ephemeral: false });
11 |
12 | if (!interaction.channel.nsfw) {
13 | interaction.reply({ embeds: [defaultNSFW(interaction)] })
14 | } else {
15 | try {
16 | let rs = get_res();
17 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
18 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
19 | method: 'GET',
20 | headers: {
21 | 'User-Agent': process.env.REDDIT_AGENT,
22 | 'Authorization': `Bearer `
23 | },
24 | })
25 | .then(r => r.json());
26 | let permalink = json[0].data.children[0].data.permalink;
27 | let posturl = `https://reddit.com${permalink}`;
28 | let postimage = json[0].data.children[0].data.url;
29 | let posttitle = json[0].data.children[0].data.title;
30 | let postup = json[0].data.children[0].data.ups;
31 | let postcomments = json[0].data.children[0].data.num_comments;
32 |
33 |
34 | const row = new ActionRowBuilder()
35 | .addComponents(
36 | new ButtonBuilder()
37 | .setCustomId(`reddit-ass`)
38 | // .setLabel("")
39 | .setEmoji('<:remoji:1152729404145930281>')
40 | .setStyle(ButtonStyle.Secondary)
41 | )
42 |
43 | interaction.editReply({
44 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
45 | components: [row]
46 | })
47 | const filter = i => i.customId === `reddit-ass`
48 |
49 | const collector = interaction.channel.createMessageComponentCollector({
50 | filter,
51 | time: 60000 * 5
52 | });
53 | try {
54 | collector.on('collect', async i => {
55 | if (i.message.interaction.user.id !== interaction.user.id) {
56 | return;
57 | }
58 | try {
59 | let rs = get_res();
60 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
61 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
62 | method: 'GET',
63 | headers: {
64 | 'User-Agent': process.env.REDDIT_AGENT,
65 | 'Authorization': `Bearer `
66 | },
67 | })
68 | .then(r => r.json());
69 | let permalink = json[0].data.children[0].data.permalink;
70 | let posturl = `https://reddit.com${permalink}`;
71 | let postimage = json[0].data.children[0].data.url;
72 | let posttitle = json[0].data.children[0].data.title;
73 | let postup = json[0].data.children[0].data.ups;
74 | let postcomments = json[0].data.children[0].data.num_comments;
75 |
76 | await i.update({
77 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
78 | components: [row],
79 | fetchReply: true
80 | })
81 | } catch (e) {
82 | console.log(e)
83 | await interaction.update({ fetchReply: true })
84 | }
85 | })
86 |
87 | collector.on('end', async (collected, reason) => { //time out
88 | if (reason === 'time') {
89 | const row = new ActionRowBuilder()
90 | .addComponents(
91 | new ButtonBuilder()
92 | .setCustomId(`reddit-ass`)
93 | // .setLabel("")
94 | .setEmoji('<:remoji:1152729404145930281>')
95 | .setStyle(ButtonStyle.Secondary)
96 | .setDisabled(true)
97 | )
98 |
99 | interaction.editReply({ components: [row] })
100 | }
101 | });
102 | } catch (e) {
103 | console.log(e)
104 |
105 | const apioff = new EmbedBuilder()
106 | .setDescription(`something went wrong [support](${client.support}) to get support about this error`)
107 | .setColor(client.color)
108 |
109 | interaction.editReply({
110 | embeds: [apioff],
111 | // files: [],
112 | // content: "",
113 | // ephemeral: true
114 | })
115 | }
116 |
117 | } catch (err) {
118 | console.log(err);
119 | const support = client.support_server
120 | const apioff = new EmbedBuilder()
121 | .setDescription(`Oops! our client is limited and cant send request to Reddit\n\n[Support Server](${client.support})`)
122 | .setColor(client.color)
123 | interaction.editReply({
124 | embeds: [apioff]
125 | })
126 | }
127 | }
128 | }
129 | }
130 |
--------------------------------------------------------------------------------
/commands/Reddit/Gay.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const get_res = require('../../Functions/reddit_cmd_subs/Gay');
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 | require("dotenv").config();
5 |
6 | module.exports = {
7 | name: ["reddit", "gay"],
8 | description: "get random gay porn",
9 | run: async (interaction, client, user, language) => {
10 | await interaction.deferReply({ ephemeral: false });
11 |
12 | if (!interaction.channel.nsfw) {
13 | interaction.reply({ embeds: [defaultNSFW(interaction)] })
14 | } else {
15 | try {
16 | let rs = get_res();
17 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
18 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
19 | method: 'GET',
20 | headers: {
21 | 'User-Agent': process.env.REDDIT_AGENT,
22 | 'Authorization': `Bearer `
23 | },
24 | })
25 | .then(r => r.json());
26 | let permalink = json[0].data.children[0].data.permalink;
27 | let posturl = `https://reddit.com${permalink}`;
28 | let postimage = json[0].data.children[0].data.url;
29 | let posttitle = json[0].data.children[0].data.title;
30 | let postup = json[0].data.children[0].data.ups;
31 | let postcomments = json[0].data.children[0].data.num_comments;
32 |
33 |
34 | const row = new ActionRowBuilder()
35 | .addComponents(
36 | new ButtonBuilder()
37 | .setCustomId(`reddit-gay`)
38 | // .setLabel("")
39 | .setEmoji('<:remoji:1152729404145930281>')
40 | .setStyle(ButtonStyle.Secondary)
41 | )
42 |
43 | interaction.editReply({
44 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
45 | components: [row]
46 | })
47 | const filter = i => i.customId === `reddit-gay`
48 |
49 | const collector = interaction.channel.createMessageComponentCollector({
50 | filter,
51 | time: 60000 * 5
52 | });
53 | try {
54 | collector.on('collect', async i => {
55 | if (i.message.interaction.user.id !== interaction.user.id) {
56 | return;
57 | }
58 | try {
59 | let rs = get_res();
60 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
61 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
62 | method: 'GET',
63 | headers: {
64 | 'User-Agent': process.env.REDDIT_AGENT,
65 | 'Authorization': `Bearer `
66 | },
67 | })
68 | .then(r => r.json());
69 | let permalink = json[0].data.children[0].data.permalink;
70 | let posturl = `https://reddit.com${permalink}`;
71 | let postimage = json[0].data.children[0].data.url;
72 | let posttitle = json[0].data.children[0].data.title;
73 | let postup = json[0].data.children[0].data.ups;
74 | let postcomments = json[0].data.children[0].data.num_comments;
75 |
76 | await i.update({
77 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
78 | components: [row],
79 | fetchReply: true
80 | })
81 | } catch (e) {
82 | console.log(e)
83 | await interaction.update({ fetchReply: true })
84 | }
85 | })
86 |
87 | collector.on('end', async (collected, reason) => { //time out
88 | if (reason === 'time') {
89 | const row = new ActionRowBuilder()
90 | .addComponents(
91 | new ButtonBuilder()
92 | .setCustomId(`reddit-gay`)
93 | // .setLabel("")
94 | .setEmoji('<:remoji:1152729404145930281>')
95 | .setStyle(ButtonStyle.Secondary)
96 | .setDisabled(true)
97 | )
98 |
99 | interaction.editReply({ components: [row] })
100 | }
101 | });
102 | } catch (e) {
103 | console.log(e)
104 |
105 | const apioff = new EmbedBuilder()
106 | .setDescription(`something went wrong [support](${client.support}) to get support about this error`)
107 | .setColor(client.color)
108 |
109 | interaction.editReply({
110 | embeds: [apioff],
111 | // files: [],
112 | // content: "",
113 | // ephemeral: true
114 | })
115 | }
116 |
117 | } catch (err) {
118 | console.log(err);
119 | const support = client.support_server
120 | const apioff = new EmbedBuilder()
121 | .setDescription(`Oops! our client is limited and cant send request to Reddit\n\n[Support Server](${client.support})`)
122 | .setColor(client.color)
123 | interaction.editReply({
124 | embeds: [apioff]
125 | })
126 | }
127 | }
128 | }
129 | }
130 |
--------------------------------------------------------------------------------
/commands/Reddit/Anal.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const get_res = require('../../Functions/reddit_cmd_subs/Anal');
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed.js");
4 | require("dotenv").config();
5 |
6 | module.exports = {
7 | name: ["reddit", "anal"],
8 | description: "get random anal porn",
9 | run: async (interaction, client, user, language) => {
10 | await interaction.deferReply({ ephemeral: false });
11 |
12 | if (!interaction.channel.nsfw) {
13 | interaction.reply({ embeds: [defaultNSFW(interaction)] })
14 | } else {
15 | try {
16 | let rs = get_res();
17 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
18 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
19 | method: 'GET',
20 | headers: {
21 | 'User-Agent': process.env.REDDIT_AGENT,
22 | 'Authorization': `Bearer `
23 | },
24 | })
25 | .then(r => r.json());
26 | let permalink = json[0].data.children[0].data.permalink;
27 | let posturl = `https://reddit.com${permalink}`;
28 | let postimage = json[0].data.children[0].data.url;
29 | let posttitle = json[0].data.children[0].data.title;
30 | let postup = json[0].data.children[0].data.ups;
31 | let postcomments = json[0].data.children[0].data.num_comments;
32 |
33 |
34 | const row = new ActionRowBuilder()
35 | .addComponents(
36 | new ButtonBuilder()
37 | .setCustomId(`reddit-anal`)
38 | // .setLabel("")
39 | .setEmoji('<:remoji:1152729404145930281>')
40 | .setStyle(ButtonStyle.Secondary)
41 | )
42 |
43 | interaction.editReply({
44 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
45 | components: [row]
46 | })
47 | const filter = i => i.customId === `reddit-anal`
48 |
49 | const collector = interaction.channel.createMessageComponentCollector({
50 | filter,
51 | time: 60000 * 5
52 | });
53 | try {
54 | collector.on('collect', async i => {
55 | if (i.message.interaction.user.id !== interaction.user.id) {
56 | return;
57 | }
58 | try {
59 | let rs = get_res();
60 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
61 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
62 | method: 'GET',
63 | headers: {
64 | 'User-Agent': process.env.REDDIT_AGENT,
65 | 'Authorization': `Bearer `
66 | },
67 | })
68 | .then(r => r.json());
69 | let permalink = json[0].data.children[0].data.permalink;
70 | let posturl = `https://reddit.com${permalink}`;
71 | let postimage = json[0].data.children[0].data.url;
72 | let posttitle = json[0].data.children[0].data.title;
73 | let postup = json[0].data.children[0].data.ups;
74 | let postcomments = json[0].data.children[0].data.num_comments;
75 |
76 | await i.update({
77 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
78 | components: [row],
79 | fetchReply: true
80 | })
81 | } catch (e) {
82 | console.log(e)
83 | await interaction.update({ fetchReply: true })
84 | }
85 | })
86 |
87 | collector.on('end', async (collected, reason) => { //time out
88 | if (reason === 'time') {
89 | const row = new ActionRowBuilder()
90 | .addComponents(
91 | new ButtonBuilder()
92 | .setCustomId(`reddit-anal`)
93 | // .setLabel("")
94 | .setEmoji('<:remoji:1152729404145930281>')
95 | .setStyle(ButtonStyle.Secondary)
96 | .setDisabled(true)
97 | )
98 |
99 | interaction.editReply({ components: [row] })
100 | }
101 | });
102 | } catch (e) {
103 | console.log(e)
104 |
105 | const apioff = new EmbedBuilder()
106 | .setDescription(`something went wrong [support](${client.support}) to get support about this error`)
107 | .setColor(client.color)
108 |
109 | interaction.editReply({
110 | embeds: [apioff],
111 | // files: [],
112 | // content: "",
113 | // ephemeral: true
114 | })
115 | }
116 | } catch (err) {
117 | console.log(err);
118 | const support = client.support_server
119 | const apioff = new EmbedBuilder()
120 | .setDescription(`Oops! our client is limited and cant send request to Reddit\n\n[Support Server](${client.support})`)
121 | .setColor(client.color)
122 | interaction.editReply({
123 | embeds: [apioff]
124 | })
125 | }
126 | }
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/commands/Reddit/Feet.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const get_res = require('../../Functions/reddit_cmd_subs/Feet');
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 | require("dotenv").config();
5 |
6 | module.exports = {
7 | name: ["reddit", "feet"],
8 | description: "get random feet porn",
9 | run: async (interaction, client, user, language) => {
10 | await interaction.deferReply({ ephemeral: false });
11 |
12 | if (!interaction.channel.nsfw) {
13 | interaction.reply({ embeds: [defaultNSFW(interaction)] })
14 | } else {
15 | try {
16 | let rs = get_res();
17 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
18 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
19 | method: 'GET',
20 | headers: {
21 | 'User-Agent': process.env.REDDIT_AGENT,
22 | 'Authorization': `Bearer `
23 | },
24 | })
25 | .then(r => r.json());
26 | let permalink = json[0].data.children[0].data.permalink;
27 | let posturl = `https://reddit.com${permalink}`;
28 | let postimage = json[0].data.children[0].data.url;
29 | let posttitle = json[0].data.children[0].data.title;
30 | let postup = json[0].data.children[0].data.ups;
31 | let postcomments = json[0].data.children[0].data.num_comments;
32 |
33 |
34 | const row = new ActionRowBuilder()
35 | .addComponents(
36 | new ButtonBuilder()
37 | .setCustomId(`reddit-feet`)
38 | // .setLabel("")
39 | .setEmoji('<:remoji:1152729404145930281>')
40 | .setStyle(ButtonStyle.Secondary)
41 | )
42 |
43 | interaction.editReply({
44 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
45 | components: [row]
46 | })
47 | const filter = i => i.customId === `reddit-feet`
48 |
49 | const collector = interaction.channel.createMessageComponentCollector({
50 | filter,
51 | time: 60000 * 5
52 | });
53 | try {
54 | collector.on('collect', async i => {
55 | if (i.message.interaction.user.id !== interaction.user.id) {
56 | return;
57 | }
58 | try {
59 | let rs = get_res();
60 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
61 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
62 | method: 'GET',
63 | headers: {
64 | 'User-Agent': process.env.REDDIT_AGENT,
65 | 'Authorization': `Bearer `
66 | },
67 | })
68 | .then(r => r.json());
69 | let permalink = json[0].data.children[0].data.permalink;
70 | let posturl = `https://reddit.com${permalink}`;
71 | let postimage = json[0].data.children[0].data.url;
72 | let posttitle = json[0].data.children[0].data.title;
73 | let postup = json[0].data.children[0].data.ups;
74 | let postcomments = json[0].data.children[0].data.num_comments;
75 |
76 | await i.update({
77 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
78 | components: [row],
79 | fetchReply: true
80 | })
81 | } catch (e) {
82 | console.log(e)
83 | await interaction.update({ fetchReply: true })
84 | }
85 | })
86 |
87 | collector.on('end', async (collected, reason) => { //time out
88 | if (reason === 'time') {
89 | const row = new ActionRowBuilder()
90 | .addComponents(
91 | new ButtonBuilder()
92 | .setCustomId(`reddit-feet`)
93 | // .setLabel("")
94 | .setEmoji('<:remoji:1152729404145930281>')
95 | .setStyle(ButtonStyle.Secondary)
96 | .setDisabled(true)
97 | )
98 |
99 | interaction.editReply({ components: [row] })
100 | }
101 | });
102 | } catch (e) {
103 | console.log(e)
104 |
105 | const apioff = new EmbedBuilder()
106 | .setDescription(`something went wrong [support](${client.support}) to get support about this error`)
107 | .setColor(client.color)
108 |
109 | interaction.editReply({
110 | embeds: [apioff],
111 | // files: [],
112 | // content: "",
113 | // ephemeral: true
114 | })
115 | }
116 |
117 | } catch (err) {
118 | console.log(err);
119 | const support = client.support_server
120 | const apioff = new EmbedBuilder()
121 | .setDescription(`Oops! our client is limited and cant send request to Reddit\n\n[Support Server](${client.support})`)
122 | .setColor(client.color)
123 | interaction.editReply({
124 | embeds: [apioff]
125 | })
126 | }
127 | }
128 | }
129 | }
130 |
--------------------------------------------------------------------------------
/commands/Reddit/Milf.js:
--------------------------------------------------------------------------------
1 | const { EmbedBuilder, ActionRowBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2 | const get_res = require('../../Functions/reddit_cmd_subs/Milf');
3 | const { defaultNSFW } = require("../../Functions/defaultNsfwEmbed");
4 | require("dotenv").config();
5 |
6 | module.exports = {
7 | name: ["reddit", "milf"],
8 | description: "get random milf porn",
9 | run: async (interaction, client, user, language) => {
10 | await interaction.deferReply({ ephemeral: false });
11 |
12 | if (!interaction.channel.nsfw) {
13 | interaction.reply({ embeds: [defaultNSFW(interaction)] })
14 | } else {
15 | try {
16 | let rs = get_res();
17 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
18 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
19 | method: 'GET',
20 | headers: {
21 | 'User-Agent': process.env.REDDIT_AGENT,
22 | 'Authorization': `Bearer `
23 | },
24 | })
25 | .then(r => r.json());
26 | let permalink = json[0].data.children[0].data.permalink;
27 | let posturl = `https://reddit.com${permalink}`;
28 | let postimage = json[0].data.children[0].data.url;
29 | let posttitle = json[0].data.children[0].data.title;
30 | let postup = json[0].data.children[0].data.ups;
31 | let postcomments = json[0].data.children[0].data.num_comments;
32 |
33 |
34 | const row = new ActionRowBuilder()
35 | .addComponents(
36 | new ButtonBuilder()
37 | .setCustomId(`reddit-milf`)
38 | // .setLabel("")
39 | .setEmoji('<:remoji:1152729404145930281>')
40 | .setStyle(ButtonStyle.Secondary)
41 | )
42 |
43 | interaction.editReply({
44 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
45 | components: [row]
46 | })
47 | const filter = i => i.customId === `reddit-milf`
48 |
49 | const collector = interaction.channel.createMessageComponentCollector({
50 | filter,
51 | time: 60000 * 5
52 | });
53 | try {
54 | collector.on('collect', async i => {
55 | if (i.message.interaction.user.id !== interaction.user.id) {
56 | return;
57 | }
58 | try {
59 | let rs = get_res();
60 | // let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`).then(r => r.json());
61 | let json = await fetch(`https://www.reddit.com/r/${rs}/random/.json`, {
62 | method: 'GET',
63 | headers: {
64 | 'User-Agent': process.env.REDDIT_AGENT,
65 | 'Authorization': `Bearer `
66 | },
67 | })
68 | .then(r => r.json());
69 | let permalink = json[0].data.children[0].data.permalink;
70 | let posturl = `https://reddit.com${permalink}`;
71 | let postimage = json[0].data.children[0].data.url;
72 | let posttitle = json[0].data.children[0].data.title;
73 | let postup = json[0].data.children[0].data.ups;
74 | let postcomments = json[0].data.children[0].data.num_comments;
75 |
76 | await i.update({
77 | content: `**[${rs}] • ${posttitle}**\n👍 ${postup} | 📝 ${postcomments}\n[⠀](${postimage})`,
78 | components: [row],
79 | fetchReply: true
80 | })
81 | } catch (e) {
82 | console.log(e)
83 | await interaction.update({ fetchReply: true })
84 | }
85 | })
86 |
87 | collector.on('end', async (collected, reason) => { //time out
88 | if (reason === 'time') {
89 | const row = new ActionRowBuilder()
90 | .addComponents(
91 | new ButtonBuilder()
92 | .setCustomId(`reddit-milf`)
93 | // .setLabel("")
94 | .setEmoji('<:remoji:1152729404145930281>')
95 | .setStyle(ButtonStyle.Secondary)
96 | .setDisabled(true)
97 | )
98 |
99 | interaction.editReply({ components: [row] })
100 | }
101 | });
102 | } catch (e) {
103 | console.log(e)
104 |
105 | const apioff = new EmbedBuilder()
106 | .setDescription(`something went wrong [support](${client.support}) to get support about this error`)
107 | .setColor(client.color)
108 |
109 | interaction.editReply({
110 | embeds: [apioff],
111 | // files: [],
112 | // content: "",
113 | // ephemeral: true
114 | })
115 | }
116 |
117 | } catch (err) {
118 | console.log(err);
119 | const support = client.support_server
120 | const apioff = new EmbedBuilder()
121 | .setDescription(`Oops! our client is limited and cant send request to Reddit\n\n[Support Server](${client.support})`)
122 | .setColor(client.color)
123 | interaction.editReply({
124 | embeds: [apioff]
125 | })
126 | }
127 | }
128 | }
129 | }
130 |
--------------------------------------------------------------------------------