Merge pull request #629 from ZynerOrg/dev

Version 2.0.0
This commit is contained in:
Axel Olausson Holtenäs 2023-05-28 16:12:16 +02:00 committed by GitHub
commit ae66108de5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
277 changed files with 7427 additions and 14317 deletions

View file

@ -1,13 +1,15 @@
# Custom Dictionary Words
Controlpanel
cooldown
Cooldowns
cpgg
ctrlpanel
dagen
discordjs
Följande
Gåva
gett
Globalt
Gåva
hoster
inom
inställningar
@ -33,5 +35,6 @@ Språkkod
upsert
uuidv
Vermium
voca
xyter
Zyner

View file

@ -1,12 +1,27 @@
# Do not use "around your text" ("")
# Timezone
TZ=Europe/Stockholm
# Do not touch unless you know what you doing
PUID=1000
PGID=1000
# Discord
DISCORD_TOKEN=
DISCORD_CLIENT_ID=
DISCORD_GUILD_ID=
# Database
DATABASE_URL=mysql://username:password@mariadb:3306/database
MYSQL_ROOT_PASSWORD=root
MYSQL_HOST=localhost
MYSQL_USER=username
MYSQL_PASSWORD=password
MYSQL_DATABASE=database
# DO NOT TOUCH UNLESS YOU KNOW WHAT YOU ARE DOING
DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@${MYSQL_HOST}/${MYSQL_DATABASE}
# Encryption
ENCRYPTION_ALGORITHM=aes-256-ctr
@ -27,4 +42,4 @@ REPUTATION_TIMEOUT=86400
# Bot Hoster
BOT_HOSTER_NAME=Zyner
BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster
BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

View file

@ -1,58 +0,0 @@
name: Docker Image CI
on:
schedule:
- cron: "0 10 * * *"
push:
branches:
- "**"
tags:
- "v*.*.*"
pull_request:
branches:
- "**"
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
# list of Docker images to use as base name for tags
images: |
zyner/xyter
# generate Docker tags based on the following events/attributes
tags: |
type=schedule
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to Container registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v3
with:
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64

View file

@ -1,13 +1,13 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Node.js CI
name: CI
on:
push:
branches: [main, next]
branches: [main, next, dev]
tags:
- "v*"
pull_request:
branches: [main, next]
branches: [main, next, dev]
workflow_dispatch:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -17,10 +17,82 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: 19
- run: npm ci
- run: npm run build --if-present
- run: npx semantic-release
node-version: 20
- name: Cache Node.js dependencies
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
- name: Build TypeScript source code
run: npm run build
- name: Semantic Release
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npx semantic-release
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
# list of Docker images to use as base name for tags
images: |
zyner/xyter
# generate Docker tags based on the following events/attributes
tags: |
type=schedule
type=ref,event=branch
type=ref,event=pr
type=raw,value=latest,enable={{is_default_branch}}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: 20
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
if: github.event_name != 'pull_request'
run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to Container registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v3
with:
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64

6
.gitignore vendored
View file

@ -137,3 +137,9 @@ dist
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# NixOS
.direnv
# Docker
docker-compose.override.yml

View file

@ -1,18 +1,20 @@
{
"branches": [
"main",
{
"name": "next",
"prerelease": true
}
],
"debug": true,
"ci": true,
"dryRun": false,
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/npm",
"@semantic-release/git",
"@semantic-release/github"
]
"branches": [
"main",
{
"name": "next",
"prerelease": true
}
],
"debug": true,
"ci": true,
"dryRun": false,
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/npm",
"@semantic-release/changelog",
"@semantic-release/git",
"@semantic-release/github"
]
}

View file

@ -1,7 +1,7 @@
{
"editor.bracketPairColorization.enabled": true,
"editor.cursorBlinking": "phase",
"editor.cursorSmoothCaretAnimation": true,
"editor.cursorSmoothCaretAnimation": "on",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.fontLigatures": true,
"editor.formatOnSave": true,
@ -10,7 +10,7 @@
"editor.minimap.renderCharacters": false,
"editor.minimap.showSlider": "always",
"editor.tabSize": 2,
"git.enableCommitSigning": true,
// "git.enableCommitSigning": true,
"editor.wordWrapColumn": 100,
"files.eol": "\n",
"files.trimTrailingWhitespace": true,
@ -36,5 +36,8 @@
"conventionalCommits.scopes": ["git", "github", "prisma"],
"[dockerfile]": {
"editor.defaultFormatter": "foxundermoon.shell-format"
},
"[sql]": {
"editor.defaultFormatter": "sqlfluff.vscode-sqlfluff"
}
}

View file

@ -1,24 +1,36 @@
FROM node:19-alpine3.16 AS builder
# Dependencies
FROM node:19-alpine3.17 AS dependencies
# Create app directory
WORKDIR /app
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./
COPY prisma ./prisma/
# Install app dependencies
COPY package.json package-lock.json ./
RUN npm install
# Build
FROM node:19-alpine3.17 AS build
WORKDIR /app
COPY --from=dependencies /app/node_modules ./node_modules
COPY . .
RUN npm run build
RUN npx prisma generate && npm run build
FROM node:19-alpine3.16
# Deploy
FROM node:19-alpine3.17 as deploy
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/prisma ./prisma
WORKDIR /app
ENV NODE_ENV production
# Add mysql precheck
RUN apk add --no-cache mysql-client
ADD docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
# Copy files
COPY --from=build /app/package.json ./
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/prisma ./prisma
COPY --from=build /app/dist ./dist
ENTRYPOINT [ "/docker-entrypoint.sh" ]
CMD [ "npm", "run", "start:migrate:prod" ]

View file

@ -1,13 +0,0 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.metadata = void 0;
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.metadata = { guildOnly: false, ephemeral: false };
// Execute the function
const execute = (interaction) => {
logger_1.default.debug(interaction.customId, "primary button clicked!");
};
exports.execute = execute;

View file

@ -1,65 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
// Modules
const audits_1 = __importDefault(require("./modules/audits"));
const cpgg_1 = __importDefault(require("./modules/cpgg"));
const credits_1 = __importDefault(require("./modules/credits"));
const embeds_1 = __importDefault(require("./modules/embeds"));
const points_1 = __importDefault(require("./modules/points"));
const shop_1 = __importDefault(require("./modules/shop"));
const welcome_1 = __importDefault(require("./modules/welcome"));
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("config")
.setDescription("Manage guild configurations.")
.setDMPermission(false)
// Modules
.addSubcommand(audits_1.default.builder)
.addSubcommand(cpgg_1.default.builder)
.addSubcommand(credits_1.default.builder)
.addSubcommand(embeds_1.default.builder)
.addSubcommand(points_1.default.builder)
.addSubcommand(shop_1.default.builder)
.addSubcommand(welcome_1.default.builder);
// Execute function
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
switch (interaction.options.getSubcommand()) {
case "audits":
yield audits_1.default.execute(interaction);
break;
case "cpgg":
yield cpgg_1.default.execute(interaction);
break;
case "credits":
yield credits_1.default.execute(interaction);
break;
case "embeds":
yield embeds_1.default.execute(interaction);
break;
case "points":
yield points_1.default.execute(interaction);
break;
case "shop":
yield shop_1.default.execute(interaction);
break;
case "welcome":
yield welcome_1.default.execute(interaction);
break;
default:
throw new Error("No module found for that specific command.");
}
});
exports.execute = execute;

View file

@ -1,89 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("audits")
.setDescription("Audits")
.addBooleanOption((option) => option
.setName("status")
.setDescription("Should audits be enabled?")
.setRequired(true))
.addChannelOption((option) => option
.setName("channel")
.setDescription("Channel for audit messages.")
.addChannelTypes(discord_js_1.ChannelType.GuildText)
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { guild, options } = interaction;
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(guild);
const status = options.getBoolean("status");
const channel = options.getChannel("channel");
if (!guild)
throw new Error("Guild not found.");
if (!channel)
throw new Error("Channel not found.");
if (status === null)
throw new Error("Status not found.");
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {
auditsEnabled: status,
auditsChannelId: channel.id,
},
create: {
id: guild.id,
auditsEnabled: status,
auditsChannelId: channel.id,
},
});
logger_1.default.silly(createGuild);
const embedSuccess = new discord_js_1.EmbedBuilder()
.setTitle("[:hammer:] Audits")
.setDescription("Guild configuration updated successfully.")
.setColor(successColor)
.addFields({
name: "🤖 Status",
value: `${createGuild.auditsEnabled
? ":white_check_mark: Enabled"
: ":x: Disabled"}`,
inline: true,
}, {
name: "🌊 Channel",
value: `<#${createGuild.auditsChannelId}>`,
inline: true,
})
.setTimestamp()
.setFooter({
iconURL: footerIcon,
text: footerText,
});
yield interaction.editReply({
embeds: [embedSuccess],
});
return;
}),
};

View file

@ -1,95 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
const encryption_1 = __importDefault(require("../../../../helpers/encryption"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("cpgg")
.setDescription("Controlpanel.gg")
.addStringOption((option) => option
.setName("scheme")
.setDescription(`Controlpanel.gg Scheme`)
.setRequired(true)
.setChoices({ name: "HTTPS (secure)", value: "https" }, { name: "HTTP (insecure)", value: "http" }))
.addStringOption((option) => option
.setName("domain")
.setDescription(`Controlpanel.gg Domain`)
.setRequired(true))
.addStringOption((option) => option
.setName("token")
.setDescription(`Controlpanel.gg Application API`)
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild } = interaction;
const tokenData = options.getString("token");
const scheme = options.getString("scheme");
const domain = options.getString("domain");
const token = tokenData && encryption_1.default.encrypt(tokenData);
const url = scheme && domain && encryption_1.default.encrypt(`${scheme}://${domain}`);
if (!guild)
throw new Error("No guild found");
if (!token)
throw new Error("Token not found");
if (!url)
throw new Error("URL not found");
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {
apiCpggTokenIv: token.iv,
apiCpggTokenContent: token.content,
apiCpggUrlIv: url.iv,
apiCpggUrlContent: url.content,
},
create: {
id: guild.id,
apiCpggTokenIv: token.iv,
apiCpggTokenContent: token.content,
apiCpggUrlIv: url.iv,
apiCpggUrlContent: url.content,
},
});
logger_1.default.silly(createGuild);
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Updated API credentials.`);
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:tools:] CPGG")
.setDescription(`The following configuration will be used.
**Scheme**: ${scheme}
**Domain**: ${domain}
**Token**: ends with ${tokenData === null || tokenData === void 0 ? void 0 : tokenData.slice(-4)}`)
.setColor(successColor)
.setTimestamp()
.setFooter({
iconURL: footerIcon,
text: footerText,
});
yield (interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
}));
return;
}),
};

View file

@ -1,140 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("credits")
.setDescription(`Configure this guild's credits module.`)
.addBooleanOption((option) => option
.setName("enabled")
.setDescription("Do you want to activate the credit module?")
.setRequired(true))
.addNumberOption((option) => option
.setName("rate")
.setDescription("Credit rate per message.")
.setRequired(true)
.setMinValue(1))
.addNumberOption((option) => option
.setName("minimum-length")
.setDescription("Minimum message length to receive credit.")
.setRequired(true))
.addNumberOption((option) => option
.setName("work-rate")
.setDescription("The maximum amount of credit that can be obtained within a working day.")
.setRequired(true)
.setMinValue(1))
.addNumberOption((option) => option
.setName("work-timeout")
.setDescription("How long you need to wait before you can work again provided in seconds.")
.setRequired(true))
.addNumberOption((option) => option
.setName("timeout")
.setDescription("How long you need to wait before you can earn more credits.")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { guild, options } = interaction;
const enabled = options.getBoolean("enabled");
const rate = options.getNumber("rate");
const timeout = options.getNumber("timeout");
const minimumLength = options.getNumber("minimum-length");
const workRate = options.getNumber("work-rate");
const workTimeout = options.getNumber("work-timeout");
if (!guild)
throw new Error("Guild not found.");
if (typeof enabled !== "boolean")
throw new Error("Enabled option is not a boolean.");
if (typeof rate !== "number")
throw new Error("Rate is not a number.");
if (typeof workRate !== "number")
throw new Error("Work rate is not a number.");
if (typeof workTimeout !== "number")
throw new Error("Work timeout is not a number.");
if (typeof timeout !== "number")
throw new Error("Timeout is not a number.");
if (typeof minimumLength !== "number")
throw new Error("Minimum length is not a number.");
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {
creditsEnabled: enabled,
creditsRate: rate,
creditsTimeout: timeout,
creditsWorkRate: workRate,
creditsWorkTimeout: workTimeout,
creditsMinimumLength: minimumLength,
},
create: {
id: guild.id,
creditsEnabled: enabled,
creditsRate: rate,
creditsTimeout: timeout,
creditsWorkRate: workRate,
creditsWorkTimeout: workTimeout,
creditsMinimumLength: minimumLength,
},
});
logger_1.default.silly(createGuild);
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:tools:] Credits")
.setDescription("Credits settings updated")
.setColor(successColor)
.addFields({
name: "🤖 Enabled?",
value: `${createGuild.creditsEnabled}`,
inline: true,
}, {
name: "📈 Rate",
value: `${createGuild.creditsRate}`,
inline: true,
}, {
name: "📈 Work Rate",
value: `${createGuild.creditsWorkRate}`,
inline: true,
}, {
name: "🔨 Minimum Length",
value: `${createGuild.creditsMinimumLength}`,
inline: true,
}, {
name: "⏰ Timeout",
value: `${createGuild.creditsTimeout}`,
inline: true,
}, {
name: "⏰ Work Timeout",
value: `${createGuild.creditsWorkTimeout}`,
inline: true,
})
.setTimestamp()
.setFooter({
iconURL: footerIcon,
text: footerText,
});
yield interaction.editReply({
embeds: [interactionEmbed],
});
return;
}),
};

View file

@ -1,67 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_1 = __importDefault(require("../../../../../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../../../middlewares/logger"));
exports.default = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
const { options, guild } = interaction;
if (!guild)
throw new Error("Guild not found");
const embedConfig = yield (0, getEmbedData_1.default)(guild);
if (!embedConfig)
throw new Error("Embed config not found");
const newSuccessColor = options.getString("success-color");
const newWaitColor = options.getString("wait-color");
const newErrorColor = options.getString("error-color");
const newFooterIcon = options.getString("footer-icon");
const newFooterText = options.getString("footer-text");
if (!newSuccessColor)
throw new Error("Success color not found");
if (!newWaitColor)
throw new Error("Wait color not found");
if (!newErrorColor)
throw new Error("Error color not found");
if (!newFooterIcon)
throw new Error("Footer icon not found");
if (!newFooterText)
throw new Error("Footer text not found");
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {
embedColorSuccess: newSuccessColor,
embedColorWait: newWaitColor,
embedColorError: newErrorColor,
embedFooterIcon: newFooterIcon,
embedFooterText: newFooterText,
},
create: {
id: guild.id,
embedColorSuccess: newSuccessColor,
embedColorWait: newWaitColor,
embedColorError: newErrorColor,
embedFooterIcon: newFooterIcon,
embedFooterText: newFooterText,
},
});
logger_1.default.silly(createGuild);
const successColor = createGuild.embedColorSuccess;
const waitColor = createGuild.embedColorWait;
const errorColor = createGuild.embedColorError;
const footerText = createGuild.embedFooterText;
const footerIcon = createGuild.embedFooterIcon;
return { successColor, waitColor, errorColor, footerText, footerIcon };
});

View file

@ -1,91 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
const getValues_1 = __importDefault(require("./components/getValues"));
exports.default = {
builder: (command) => {
return command
.setName("embeds")
.setDescription(`Embeds`)
.addStringOption((option) => option
.setName("success-color")
.setDescription("No provided description")
.setRequired(true))
.addStringOption((option) => option
.setName("wait-color")
.setDescription("No provided description")
.setRequired(true))
.addStringOption((option) => option
.setName("error-color")
.setDescription("No provided description")
.setRequired(true))
.addStringOption((option) => option
.setName("footer-icon")
.setDescription("No provided description")
.setRequired(true))
.addStringOption((option) => option
.setName("footer-text")
.setDescription("No provided description")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { guild } = interaction;
if (!guild)
throw new Error("Guild not found");
const { successColor, waitColor, errorColor, footerText, footerIcon } = yield (0, getValues_1.default)(interaction);
const embed = new discord_js_1.EmbedBuilder()
.setTitle("[:tools:] Embeds")
.setFooter({ text: footerText, iconURL: footerIcon })
.setTimestamp(new Date());
embed
.setDescription("Following embed configuration will be used.")
.setColor(successColor)
.addFields([
{
name: "🟢 Success Color",
value: `${successColor}`,
inline: true,
},
{
name: "🟡 Wait Color",
value: `${waitColor}`,
inline: true,
},
{
name: "🔴 Error Color",
value: `${errorColor}`,
inline: true,
},
{
name: "🖼️ Footer Icon",
value: `${footerIcon}`,
inline: true,
},
{
name: "📄 Footer Text",
value: `${footerText}`,
inline: true,
},
]);
yield interaction.editReply({
embeds: [embed],
});
return;
}),
};

View file

@ -1,112 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("points")
.setDescription("Points")
.addBooleanOption((option) => option
.setName("status")
.setDescription("Should credits be enabled?")
.setRequired(true))
.addNumberOption((option) => option
.setName("rate")
.setDescription("Amount of credits per message.")
.setRequired(true))
.addNumberOption((option) => option
.setName("minimum-length")
.setDescription("Minimum length of message to earn credits.")
.setRequired(true))
.addNumberOption((option) => option
.setName("timeout")
.setDescription("Timeout between earning credits (milliseconds).")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild } = interaction;
const status = options === null || options === void 0 ? void 0 : options.getBoolean("status");
const rate = options === null || options === void 0 ? void 0 : options.getNumber("rate");
const timeout = options === null || options === void 0 ? void 0 : options.getNumber("timeout");
const minimumLength = options === null || options === void 0 ? void 0 : options.getNumber("minimum-length");
if (!guild)
throw new Error("Guild is required");
if (status === null)
throw new Error("Status must be specified");
if (!rate)
throw new Error("Rate must be specified");
if (!timeout)
throw new Error("Timeout must be specified");
if (!minimumLength)
throw new Error("Minimum length must be specified");
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {
pointsEnabled: status,
pointsRate: rate,
pointsTimeout: timeout,
pointsMinimumLength: minimumLength,
},
create: {
id: guild.id,
pointsEnabled: status,
pointsRate: rate,
pointsTimeout: timeout,
pointsMinimumLength: minimumLength,
},
});
logger_1.default.silly(createGuild);
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:tools:] Points")
.setDescription("Points settings updated")
.setColor(successColor)
.addFields({
name: "🤖 Status",
value: `${createGuild.pointsEnabled}`,
inline: true,
}, {
name: "📈 Rate",
value: `${createGuild.pointsRate}`,
inline: true,
}, {
name: "🔨 Minimum Length",
value: `${createGuild.pointsMinimumLength}`,
inline: true,
}, {
name: "⏰ Timeout",
value: `${createGuild.pointsTimeout}`,
inline: true,
})
.setTimestamp()
.setFooter({
iconURL: footerIcon,
text: footerText,
});
yield (interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
}));
return;
}),
};

View file

@ -1,86 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("shop")
.setDescription("Shop")
.addBooleanOption((option) => option
.setName("roles-status")
.setDescription("Should roles be enabled?")
.setRequired(true))
.addNumberOption((option) => option
.setName("roles-price-per-hour")
.setDescription("Price per hour for roles.")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild } = interaction;
const rolesStatus = options === null || options === void 0 ? void 0 : options.getBoolean("roles-status");
const rolesPricePerHour = options === null || options === void 0 ? void 0 : options.getNumber("roles-price-per-hour");
if (!guild)
throw new Error("Guild not found");
if (rolesStatus === null)
throw new Error("Status must be provided");
if (!rolesPricePerHour)
throw new Error("Roles price per hour must be provided");
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {
shopRolesEnabled: rolesStatus,
shopRolesPricePerHour: rolesPricePerHour,
},
create: {
id: guild.id,
shopRolesEnabled: rolesStatus,
shopRolesPricePerHour: rolesPricePerHour,
},
});
logger_1.default.silly(createGuild);
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:tools:] Shop")
.setDescription("Shop settings updated")
.setColor(successColor)
.addFields({
name: "🤖 Roles Status",
value: `${createGuild.shopRolesEnabled}`,
inline: true,
}, {
name: "🌊 Roles Price Per Hour",
value: `${createGuild.shopRolesPricePerHour}`,
inline: true,
})
.setTimestamp()
.setFooter({
iconURL: footerIcon,
text: footerText,
});
yield (interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
}));
return;
}),
};

View file

@ -1,130 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("welcome")
.setDescription("Welcome")
.addBooleanOption((option) => option
.setName("status")
.setDescription("Should welcome be enabled?")
.setRequired(true))
.addChannelOption((option) => option
.setName("join-channel")
.setDescription("Channel for join messages.")
.addChannelTypes(discord_js_1.ChannelType.GuildText)
.setRequired(true))
.addChannelOption((option) => option
.setName("leave-channel")
.setDescription("Channel for leave messages.")
.addChannelTypes(discord_js_1.ChannelType.GuildText)
.setRequired(true))
.addStringOption((option) => option
.setName("leave-message")
.setDescription("Message for leave messages.")
.setRequired(true))
.addStringOption((option) => option
.setName("join-message")
.setDescription("Message for join messages.")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild } = interaction;
const status = options === null || options === void 0 ? void 0 : options.getBoolean("status");
const joinChannel = options === null || options === void 0 ? void 0 : options.getChannel("join-channel");
const leaveChannel = options === null || options === void 0 ? void 0 : options.getChannel("leave-channel");
const joinChannelMessage = options === null || options === void 0 ? void 0 : options.getString("join-message");
const leaveChannelMessage = options === null || options === void 0 ? void 0 : options.getString("leave-message");
if (!guild)
throw new Error("Guild not found");
if (status === null)
throw new Error("Status not specified");
if (!joinChannel)
throw new Error("Join channel not specified");
if (!joinChannelMessage)
throw new Error("Join channel message not specified");
if (!leaveChannel)
throw new Error("Leave channel not specified");
if (!leaveChannelMessage)
throw new Error("Leave channel message not specified");
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {
welcomeEnabled: status,
welcomeJoinChannelId: joinChannel.id,
welcomeJoinChannelMessage: joinChannelMessage,
welcomeLeaveChannelId: leaveChannel.id,
welcomeLeaveChannelMessage: leaveChannelMessage,
},
create: {
id: guild.id,
welcomeEnabled: status,
welcomeJoinChannelId: joinChannel.id,
welcomeJoinChannelMessage: joinChannelMessage,
welcomeLeaveChannelId: leaveChannel.id,
welcomeLeaveChannelMessage: leaveChannelMessage,
},
});
logger_1.default.silly(createGuild);
const interactionEmbedDisabled = new discord_js_1.EmbedBuilder()
.setTitle("[:tools:] Welcome")
.setDescription("This module is currently disabled, please enable it to continue.")
.setColor(successColor)
.setTimestamp()
.setFooter({
iconURL: footerIcon,
text: footerText,
});
if (!createGuild.welcomeEnabled) {
return interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbedDisabled],
});
}
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:tools:] Welcome")
.setDescription(`The following configuration will be used.
[👋] **Welcome**
**Channel**: <#${createGuild.welcomeJoinChannelId}>
**Message**: ${createGuild.welcomeJoinChannelMessage}
[🚪] **Leave**
**Channel**: <#${createGuild.welcomeLeaveChannelId}>
**Message**: ${createGuild.welcomeLeaveChannelMessage}`)
.setColor(successColor)
.setTimestamp()
.setFooter({
iconURL: footerIcon,
text: footerText,
});
yield (interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
}));
return true;
}),
};

View file

@ -1,33 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
// Modules
const view_1 = require("./modules/view");
//
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("counters")
.setDescription("View guild counters")
.setDMPermission(false)
// Modules
.addSubcommand(view_1.builder);
// Execute function
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
switch (interaction.options.getSubcommand()) {
case "view":
yield (0, view_1.execute)(interaction);
break;
default:
throw new Error("No module found for that command.");
}
});
exports.execute = execute;

View file

@ -1,66 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../helpers/baseEmbeds");
// 1. Create builder function.
const builder = (command) => {
return command
.setName("view")
.setDescription(`View a guild counter`)
.addChannelOption((option) => option
.setName("channel")
.setDescription(`The channel that contains the counter you want to view`)
.setRequired(true)
.addChannelTypes(discord_js_1.ChannelType.GuildText));
};
exports.builder = builder;
// 2. Create execute function.
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as permanent.
yield (0, deferReply_1.default)(interaction, false);
// 2. Destructure interaction object
const { options, guild } = interaction;
if (!guild)
throw new Error(`Guild not found`);
if (!options)
throw new Error(`Options not found`);
// 3. Get options
const discordChannel = options.getChannel("channel");
if (!discordChannel)
throw new Error(`Channel not found`);
// 4. Create base embeds.
const EmbedSuccess = yield (0, baseEmbeds_1.success)(guild, "[:1234:] View");
// 5. Get counter from database.
const channelCounter = yield database_1.default.guildCounter.findUnique({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: discordChannel.id,
},
},
});
if (!channelCounter)
throw new Error("No counter found for channel");
// 6. Send embed.
yield interaction.editReply({
embeds: [
EmbedSuccess.setDescription(`Viewing counter for channel ${discordChannel}: ${channelCounter.count}!`),
],
});
});
exports.execute = execute;

View file

@ -1,48 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
// Modules
const balance_1 = require("./modules/balance");
const gift_1 = require("./modules/gift");
const top_1 = require("./modules/top");
const work_1 = require("./modules/work");
// 1. Export a builder function.
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("credits")
.setDescription("Manage your credits.")
.setDMPermission(false)
// Modules
.addSubcommand(balance_1.builder)
.addSubcommand(gift_1.builder)
.addSubcommand(top_1.builder)
.addSubcommand(work_1.builder);
// 2. Export an execute function.
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
switch (interaction.options.getSubcommand()) {
case "balance":
yield (0, balance_1.execute)(interaction);
break;
case "gift":
yield (0, gift_1.execute)(interaction);
break;
case "top":
yield (0, top_1.execute)(interaction);
break;
case "work":
yield (0, work_1.execute)(interaction);
break;
default:
throw new Error("Subcommand not found");
}
});
exports.execute = execute;

View file

@ -1,90 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../helpers/baseEmbeds");
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
// 1. Export a builder function.
const builder = (command) => {
return command
.setName("balance")
.setDescription(`Check balance`)
.addUserOption((option) => option.setName("target").setDescription(`Account you want to check`));
};
exports.builder = builder;
// 2. Export an execute function.
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as ephemeral.
yield (0, deferReply_1.default)(interaction, true);
// 2. Destructure interaction object.
const { options, user, guild } = interaction;
if (!guild)
throw new Error("Server unavailable");
if (!user)
throw new Error("User unavailable");
if (!options)
throw new Error("Options unavailable");
// 3. Get options from interaction.
const target = options.getUser("target");
// 4. Create base embeds.
const EmbedSuccess = yield (0, baseEmbeds_1.success)(guild, ":credit_card:︱Balance");
// 5. Upsert the user in the database.
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: (target || user).id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: (target || user).id,
},
where: {
id: (target || user).id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
// 6. Send embed.
yield interaction.editReply({
embeds: [
EmbedSuccess.setDescription(target
? `${target} has ${createGuildMember.creditsEarned} coins in his account.`
: `You have ${createGuildMember.creditsEarned} coins in your account.`),
],
});
});
exports.execute = execute;

View file

@ -1,153 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../helpers/baseEmbeds");
const transfer_1 = __importDefault(require("../../../../helpers/credits/transfer"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
// 1. Export a builder function.
const builder = (command) => {
return command
.setName("gift")
.setDescription(`Gift credits to an account`)
.addUserOption((option) => option
.setName("account")
.setDescription("The account you gift to")
.setRequired(true))
.addIntegerOption((option) => option
.setName("credits")
.setDescription("How much you gift")
.setRequired(true)
.setMinValue(1)
.setMaxValue(100000000))
.addStringOption((option) => option
.setName("message")
.setDescription("Your personalized message to the account"));
};
exports.builder = builder;
// 2. Export an execute function.
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as ephemeral.
yield (0, deferReply_1.default)(interaction, true);
// 2. Destructure interaction object.
const { options, user, guild } = interaction;
if (!guild)
throw new Error("Server unavailable");
if (!user)
throw new Error("User unavailable");
// 3. Get options from interaction.
const account = options.getUser("account");
const credits = options.getInteger("credits");
const message = options.getString("message");
if (!account)
throw new Error("Account unavailable");
if (typeof credits !== "number")
throw new Error("You need to enter a valid number of credits to gift");
// 4. Create base embeds.
const receiverEmbed = yield (0, baseEmbeds_1.success)(guild, `:credit_card:︱You received a gift from ${user.username}`);
// 5. Start an transaction of the credits.
yield (0, transfer_1.default)(guild, user, account, credits);
const receiverGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: account.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: account.id,
},
where: {
id: account.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(receiverGuildMember);
if (message)
receiverEmbed.setFields({ name: "Message", value: message });
// 6. Tell the target that they have been gifted credits.
yield account.send({
embeds: [
receiverEmbed.setDescription(`You received a gift containing ${credits} coins from ${user}! You now have ${receiverGuildMember.creditsEarned} coins in balance!`),
],
});
const senderGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(senderGuildMember);
const senderEmbed = yield (0, baseEmbeds_1.success)(guild, ":credit_card:︱Send a gift");
if (message)
senderEmbed.setFields({ name: "Message", value: message });
// 7. Tell the sender that they have gifted the credits.
yield interaction.editReply({
embeds: [
senderEmbed.setDescription(`Your gift has been sent to ${account}. You now have ${senderGuildMember.creditsEarned} coins in balance!`),
],
});
});
exports.execute = execute;

View file

@ -1,60 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../helpers/baseEmbeds");
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
// 1. Export a builder function.
const builder = (command) => {
return command.setName("top").setDescription(`View the top users`);
};
exports.builder = builder;
// 2. Export an execute function.
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as permanent.
yield (0, deferReply_1.default)(interaction, false);
// 2. Destructure interaction object.
const { guild, client } = interaction;
if (!guild)
throw new Error("Guild not found");
if (!client)
throw new Error("Client not found");
// 3. Create base embeds.
const EmbedSuccess = yield (0, baseEmbeds_1.success)(guild, "[:dollar:] Top");
// 4. Get the top 10 users.
const topTen = yield database_1.default.guildMember.findMany({
where: {
guildId: guild.id,
},
orderBy: {
creditsEarned: "desc",
},
take: 10,
});
logger_1.default.silly(topTen);
// 5. Create the top 10 list.
const entry = (guildMember, index) => `${index + 1}. ${(0, discord_js_1.userMention)(guildMember.userId)} | :coin: ${guildMember.creditsEarned}`;
// 6. Send embed
return interaction.editReply({
embeds: [
EmbedSuccess.setDescription(`The top 10 users in this server are:\n\n${topTen
.map(entry)
.join("\n")}`),
],
});
});
exports.execute = execute;

View file

@ -1,70 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const chance_1 = __importDefault(require("chance"));
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../helpers/baseEmbeds");
const give_1 = __importDefault(require("../../../../helpers/credits/give"));
const cooldown_1 = __importDefault(require("../../../../middlewares/cooldown"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
// 1. Export a builder function.
const builder = (command) => {
return command.setName("work").setDescription(`Work to earn credits`);
};
exports.builder = builder;
// 2. Export an execute function.
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as ephemeral.
yield (0, deferReply_1.default)(interaction, true);
// 2. Destructure interaction object.
const { guild, user, commandId } = interaction;
if (!guild)
throw new Error("Guild not found");
if (!user)
throw new Error("User not found");
// 3. Create base embeds.
const EmbedSuccess = yield (0, baseEmbeds_1.success)(guild, "[:dollar:] Work");
// 4. Create new Chance instance.
const chance = new chance_1.default();
// 5. Upsert the guild in the database.
const createGuild = yield database_1.default.guild.upsert({
where: {
id: guild.id,
},
update: {},
create: {
id: guild.id,
},
});
logger_1.default.silly(createGuild);
if (!createGuild)
throw new Error("Guild not found");
// 6. Create a cooldown for the user.
yield (0, cooldown_1.default)(guild, user, commandId, createGuild.creditsWorkTimeout);
// 6. Generate a random number between 0 and creditsWorkRate.
const creditsEarned = chance.integer({
min: 0,
max: createGuild.creditsWorkRate,
});
const upsertGuildMember = yield (0, give_1.default)(guild, user, creditsEarned);
// 8. Send embed.
yield interaction.editReply({
embeds: [
EmbedSuccess.setDescription(`You worked and earned **${creditsEarned}** credits! You now have **${upsertGuildMember.creditsEarned}** credits. :tada:`),
],
});
});
exports.execute = execute;

View file

@ -1,34 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
// Modules
const lookup_1 = __importDefault(require("./modules/lookup"));
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("dns")
.setDescription("DNS commands.")
// Modules
.addSubcommand(lookup_1.default.builder);
// Execute the command
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
switch (interaction.options.getSubcommand()) {
case "lookup":
yield lookup_1.default.execute(interaction);
break;
default:
throw new Error(`Unknown subcommand: ${interaction.options.getSubcommand()}`);
}
});
exports.execute = execute;

View file

@ -1,132 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
exports.default = {
builder: (command) => {
return command
.setName("lookup")
.setDescription("Lookup a domain or ip. (Request sent over HTTP, proceed with caution!)")
.addStringOption((option) => option
.setName("query")
.setDescription("The query you want to look up.")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, false);
const { errorColor, successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const embedTitle = "[:hammer:] Utility (Lookup)";
const { options } = interaction;
const query = options.getString("query");
yield axios_1.default
.get(`http://ip-api.com/json/${query}`)
.then((response) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
if (response.data.status !== "success") {
yield interaction.editReply({
embeds: [
new discord_js_1.EmbedBuilder()
.setTitle(embedTitle)
.setFooter({
text: footerText,
iconURL: footerIcon,
})
.setTimestamp(new Date())
.setColor(errorColor)
.setFooter({ text: footerText, iconURL: footerIcon })
.setDescription(`${(_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.message}: ${(_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.query}`),
],
});
return;
}
yield interaction.editReply({
embeds: [
new discord_js_1.EmbedBuilder()
.setTitle(embedTitle)
.setFooter({
text: footerText,
iconURL: footerIcon,
})
.setTimestamp(new Date())
.setColor(successColor)
.setFields([
{
name: ":classical_building: AS",
value: `${response.data.as || "Unknown"}`,
inline: true,
},
{
name: ":classical_building: ISP",
value: `${response.data.isp || "Unknown"}`,
inline: true,
},
{
name: ":classical_building: Organization",
value: `${response.data.org || "Unknown"}`,
inline: true,
},
{
name: ":compass: Latitude",
value: `${response.data.lat || "Unknown"}`,
inline: true,
},
{
name: ":compass: Longitude",
value: `${response.data.lon || "Unknown"}`,
inline: true,
},
{
name: ":clock4: Timezone",
value: `${response.data.timezone || "Unknown"}`,
inline: true,
},
{
name: ":globe_with_meridians: Country",
value: `${response.data.country || "Unknown"}`,
inline: true,
},
{
name: ":globe_with_meridians: Region",
value: `${response.data.regionName || "Unknown"}`,
inline: true,
},
{
name: ":globe_with_meridians: City",
value: `${response.data.city || "Unknown"}`,
inline: true,
},
{
name: ":globe_with_meridians: Country Code",
value: `${response.data.countryCode || "Unknown"}`,
inline: true,
},
{
name: ":globe_with_meridians: Region Code",
value: `${response.data.region || "Unknown"}`,
inline: true,
},
{
name: ":globe_with_meridians: ZIP",
value: `${response.data.zip || "Unknown"}`,
inline: true,
},
]),
],
});
}));
}),
};

View file

@ -1,34 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
const logger_1 = __importDefault(require("../../middlewares/logger"));
// Modules
const meme_1 = __importDefault(require("./modules/meme"));
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("fun")
.setDescription("Fun commands.")
.addSubcommand(meme_1.default.builder);
// Execute function
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
const { options } = interaction;
if (options.getSubcommand() === "meme") {
yield meme_1.default.execute(interaction);
}
else {
logger_1.default.silly(`Unknown subcommand ${options.getSubcommand()}`);
}
});
exports.execute = execute;

View file

@ -1,59 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const cooldown_1 = __importDefault(require("../../../../middlewares/cooldown"));
exports.default = {
builder: (command) => {
return command.setName("meme").setDescription("Random memes from r/memes");
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, false);
const { guild, user, commandId } = interaction;
if (!guild)
throw new Error("Server unavailable");
if (!user)
throw new Error("User unavailable");
yield (0, cooldown_1.default)(guild, user, commandId, 15);
const embedConfig = yield (0, getEmbedData_1.default)(guild);
yield axios_1.default
.get("https://www.reddit.com/r/memes/random/.json")
.then((res) => __awaiter(void 0, void 0, void 0, function* () {
const response = res.data[0].data.children;
const content = response[0].data;
const buttons = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
.setLabel("View post")
.setStyle(discord_js_1.ButtonStyle.Link)
.setEmoji("🔗")
.setURL(`https://reddit.com${content.permalink}`));
const embed = new discord_js_1.EmbedBuilder()
.setTitle(`😆︱Meme`)
.setDescription(`**${content.title}**`)
.setTimestamp(new Date())
.setImage(content.url)
.setFooter({
text: `👍 ${content.ups}︱👎 ${content.downs}`,
})
.setColor(embedConfig.successColor);
yield interaction.editReply({ embeds: [embed], components: [buttons] });
return;
}))
.catch((error) => {
throw new Error(error.message);
});
}),
};

View file

@ -1,46 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
//Dependencies
const discord_js_1 = require("discord.js");
// Modules
const counters_1 = __importDefault(require("./modules/counters"));
const credits_1 = __importDefault(require("./modules/credits"));
// Function
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("manage")
.setDescription("Manage the bot.")
.setDMPermission(false)
// Modules
.addSubcommandGroup(counters_1.default.builder)
.addSubcommandGroup(credits_1.default.builder);
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// Destructure
const { options } = interaction;
switch (options.getSubcommandGroup()) {
case "credits": {
yield credits_1.default.execute(interaction);
break;
}
case "counters": {
yield counters_1.default.execute(interaction);
break;
}
default: {
throw new Error("Could not find an module for the command.");
}
}
});
exports.execute = execute;

View file

@ -1,42 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Modules
const add_1 = __importDefault(require("./modules/add"));
const remove_1 = __importDefault(require("./modules/remove"));
exports.default = {
builder: (group) => {
return group
.setName("counters")
.setDescription("Manage guild counters.")
.addSubcommand(add_1.default.builder)
.addSubcommand(remove_1.default.builder);
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
const { options } = interaction;
switch (options.getSubcommand()) {
case "add": {
yield add_1.default.execute(interaction);
break;
}
case "remove": {
yield remove_1.default.execute(interaction);
break;
}
default: {
throw new Error("Could not found a module for that command.");
}
}
}),
};

View file

@ -1,105 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../../../helpers/checkPermission"));
// Configurations
const database_1 = __importDefault(require("../../../../../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../../../middlewares/logger"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("add")
.setDescription("Add a counter to your guild.")
.addChannelOption((option) => option
.setName("channel")
.setDescription("The channel to send the counter to.")
.setRequired(true)
.addChannelTypes(discord_js_1.ChannelType.GuildText))
.addStringOption((option) => option
.setName("word")
.setDescription("The word to use for the counter.")
.setRequired(true))
.addNumberOption((option) => option
.setName("start")
.setDescription("The starting value of the counter."));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild } = interaction;
const discordChannel = options === null || options === void 0 ? void 0 : options.getChannel("channel");
const triggerWord = options === null || options === void 0 ? void 0 : options.getString("word");
const startValue = options === null || options === void 0 ? void 0 : options.getNumber("start");
if (!guild)
throw new Error("We could not find a guild");
if (!discordChannel)
throw new Error("We could not find a channel");
if (!triggerWord)
throw new Error("We could not find a word");
const channelCounter = yield database_1.default.guildCounter.findUnique({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: discordChannel.id,
},
},
});
if (channelCounter)
throw new Error("A counter already exists for this channel.");
const createGuildCounter = yield database_1.default.guildCounter.upsert({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: discordChannel.id,
},
},
update: {},
create: {
channelId: discordChannel.id,
triggerWord,
count: startValue || 0,
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
});
logger_1.default.silly(createGuildCounter);
if (createGuildCounter) {
const embed = new discord_js_1.EmbedBuilder()
.setTitle("[:toolbox:] Counters - Add")
.setTimestamp(new Date())
.setFooter({ text: footerText, iconURL: footerIcon });
yield (interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [
embed
.setDescription(":white_check_mark: Counter created successfully.")
.setColor(successColor),
],
}));
}
}),
};

View file

@ -1,75 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
// Models
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../../../helpers/checkPermission"));
// Configurations
const database_1 = __importDefault(require("../../../../../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../../../../../helpers/getEmbedData"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("remove")
.setDescription(`Delete a counter from your guild.`)
.addChannelOption((option) => option
.setName("channel")
.setDescription("The channel to delete the counter from.")
.setRequired(true)
.addChannelTypes(discord_js_1.ChannelType.GuildText));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild } = interaction;
const discordChannel = options === null || options === void 0 ? void 0 : options.getChannel("channel");
if (!guild)
throw new Error("We could not find a guild");
if (!discordChannel)
throw new Error("We could not find a channel");
const embed = new discord_js_1.EmbedBuilder()
.setTitle("[:toolbox:] Counters - Remove")
.setTimestamp(new Date())
.setFooter({ text: footerText, iconURL: footerIcon });
const channelCounter = yield database_1.default.guildCounter.findUnique({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: discordChannel.id,
},
},
});
if (!channelCounter)
throw new Error("There is no counter sin this channel, please add one first.");
const deleteGuildCounter = yield database_1.default.guildCounter.deleteMany({
where: {
guildId: guild.id,
channelId: discordChannel.id,
},
});
if (!deleteGuildCounter)
throw new Error("We could not find a counter for this guild");
yield (interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [
embed
.setDescription(":white_check_mark: Counter deleted successfully.")
.setColor(successColor),
],
}));
}),
};

View file

@ -1,53 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Modules
const give_1 = __importDefault(require("./modules/give"));
const giveaway_1 = __importDefault(require("./modules/giveaway"));
const set_1 = __importDefault(require("./modules/set"));
const take_1 = __importDefault(require("./modules/take"));
const transfer_1 = __importDefault(require("./modules/transfer"));
exports.default = {
builder: (group) => {
return group
.setName("credits")
.setDescription("Manage the credits of a user.")
.addSubcommand(give_1.default.builder)
.addSubcommand(set_1.default.builder)
.addSubcommand(take_1.default.builder)
.addSubcommand(transfer_1.default.builder)
.addSubcommand(giveaway_1.default.builder);
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
switch (interaction.options.getSubcommand()) {
case "give":
yield give_1.default.execute(interaction);
break;
case "set":
yield set_1.default.execute(interaction);
break;
case "take":
yield take_1.default.execute(interaction);
break;
case "transfer":
yield transfer_1.default.execute(interaction);
break;
case "giveaway":
yield giveaway_1.default.execute(interaction);
break;
default:
throw new Error("No module found for that specific command");
}
}),
};

View file

@ -1,69 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
const discord_js_1 = require("discord.js");
// Configurations
// Helpers../../../../../../../helpers/userData
const pluralize_1 = __importDefault(require("../../../../../../helpers/pluralize"));
// Models
// Handlers
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../../../helpers/baseEmbeds");
const checkPermission_1 = __importDefault(require("../../../../../../helpers/checkPermission"));
const give_1 = __importDefault(require("../../../../../../helpers/credits/give"));
exports.default = {
builder: (command) => {
return command
.setName("give")
.setDescription("Give credits to a user.")
.addUserOption((option) => option
.setName("user")
.setDescription("The user to give credits to.")
.setRequired(true))
.addIntegerOption((option) => option
.setName("amount")
.setDescription(`The amount of credits to give.`)
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as ephemeral.
yield (0, deferReply_1.default)(interaction, true);
// 2. Check if the user has the MANAGE_GUILD permission.
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
// 3. Destructure interaction object.
const { guild, options } = interaction;
if (!guild)
throw new Error("We could not get the current guild from discord.");
if (!options)
throw new Error("We could not get the options from discord.");
// 4. Get the user and amount from the options.
const discordReceiver = options.getUser("user");
const creditsAmount = options.getInteger("amount");
if (typeof creditsAmount !== "number")
throw new Error("You need to provide a credit amount.");
if (!discordReceiver)
throw new Error("We could not get the receiving user from Discord");
// 5. Create base embeds.
const embedSuccess = yield (0, baseEmbeds_1.success)(guild, "[:toolbox:] Give");
// 6. Give the credits.
yield (0, give_1.default)(guild, discordReceiver, creditsAmount);
// 7. Send embed.
return yield interaction.editReply({
embeds: [
embedSuccess.setDescription(`Successfully gave ${(0, pluralize_1.default)(creditsAmount, "credit")}`),
],
});
}),
};

View file

@ -1,166 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
const axios_1 = __importDefault(require("axios"));
const discord_js_1 = require("discord.js");
const uuid_1 = require("uuid");
const encryption_1 = __importDefault(require("../../../../../../helpers/encryption"));
// Configurations
const database_1 = __importDefault(require("../../../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../../../helpers/checkPermission"));
const getEmbedData_1 = __importDefault(require("../../../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../../../middlewares/logger"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("giveaway")
.setDescription("Giveaway some credits for specified amount of users.")
.addIntegerOption((option) => option
.setName("uses")
.setDescription("How many users should be able to use this.")
.setRequired(true))
.addIntegerOption((option) => option
.setName("credit")
.setDescription(`How much credits provided per use.`)
.setRequired(true))
.addChannelOption((option) => option
.setName("channel")
.setDescription("The channel to send the message to.")
.setRequired(true)
.addChannelTypes(discord_js_1.ChannelType.GuildText));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild); // Destructure
const { guild, user, options } = interaction;
const uses = options === null || options === void 0 ? void 0 : options.getInteger("uses");
const creditAmount = options === null || options === void 0 ? void 0 : options.getInteger("credit");
const channel = options === null || options === void 0 ? void 0 : options.getChannel("channel");
if (!uses)
throw new Error("Amount of uses is required.");
if (!creditAmount)
throw new Error("Amount of credits is required.");
if (!channel)
throw new Error("Channel is required.");
if (!guild)
throw new Error("Guild is required.");
const embed = new discord_js_1.EmbedBuilder()
.setTitle("[:toolbox:] Giveaway")
.setFooter({ text: footerText, iconURL: footerIcon });
const code = (0, uuid_1.v4)();
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
if (!createGuildMember.guild.apiCpggUrlIv ||
!createGuildMember.guild.apiCpggUrlContent)
throw new Error("No API url available");
if (!createGuildMember.guild.apiCpggTokenIv ||
!createGuildMember.guild.apiCpggTokenContent)
throw new Error("No API token available");
const url = encryption_1.default.decrypt({
iv: createGuildMember.guild.apiCpggUrlIv,
content: createGuildMember.guild.apiCpggUrlContent,
});
const api = axios_1.default === null || axios_1.default === void 0 ? void 0 : axios_1.default.create({
baseURL: `${url}/api/`,
headers: {
Authorization: `Bearer ${encryption_1.default.decrypt({
iv: createGuildMember.guild.apiCpggTokenIv,
content: createGuildMember.guild.apiCpggTokenContent,
})}`,
},
});
const shopUrl = `${url}/store`;
yield api
.post("vouchers", {
uses,
code,
credits: creditAmount,
memo: `[GIVEAWAY] ${interaction === null || interaction === void 0 ? void 0 : interaction.createdTimestamp} - ${(_a = interaction === null || interaction === void 0 ? void 0 : interaction.user) === null || _a === void 0 ? void 0 : _a.id}`,
})
.then(() => __awaiter(void 0, void 0, void 0, function* () {
yield interaction.editReply({
embeds: [
embed
.setColor(successColor)
.setDescription(`Successfully created code: ${code}`),
],
});
const buttons = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
.setLabel("Redeem it here")
.setStyle(discord_js_1.ButtonStyle.Link)
.setEmoji("🏦")
.setURL(`${shopUrl}?voucher=${code}`));
const discordChannel = guild === null || guild === void 0 ? void 0 : guild.channels.cache.get(channel.id);
if (!discordChannel)
return;
if (discordChannel.type !== discord_js_1.ChannelType.GuildText)
return;
discordChannel.send({
embeds: [
new discord_js_1.EmbedBuilder()
.setTitle("[:parachute:] Credits!")
.addFields([
{
name: "💶 Credits",
value: `${creditAmount}`,
inline: true,
},
])
.setDescription(`${interaction.user} dropped a voucher for a maximum **${uses}** members!`)
.setColor(successColor),
],
components: [buttons],
});
}));
}),
};

View file

@ -1,66 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
// Helpers
// Models
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../../../helpers/baseEmbeds");
const checkPermission_1 = __importDefault(require("../../../../../../helpers/checkPermission"));
const set_1 = __importDefault(require("../../../../../../helpers/credits/set"));
exports.default = {
builder: (command) => {
return command
.setName("set")
.setDescription("Set the amount of credits a user has.")
.addUserOption((option) => option
.setName("user")
.setDescription("The user to set the amount of credits for.")
.setRequired(true))
.addIntegerOption((option) => option
.setName("amount")
.setDescription(`The amount of credits to set.`)
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as ephemeral.
yield (0, deferReply_1.default)(interaction, true);
// 2. Check if the user has the permission to manage the guild.
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
// 3. Destructure interaction object.
const { options, guild } = interaction;
if (!guild)
throw new Error(`We could not find this guild.`);
if (!options)
throw new Error(`We could not find the options.`);
// 4. Get the user and amount from the options.
const discordUser = options.getUser("user");
const creditAmount = options.getInteger("amount");
if (typeof creditAmount !== "number")
throw new Error("Amount is not set.");
if (!discordUser)
throw new Error("User is not specified");
// 5. Set the credits.
yield (0, set_1.default)(guild, discordUser, creditAmount);
// 6. Create base embeds.
const embedSuccess = yield (0, baseEmbeds_1.success)(guild, "[:toolbox:] Set");
// 7. Send embed.
return yield interaction.editReply({
embeds: [
embedSuccess.setDescription(`Set **${discordUser}**'s credits to **${creditAmount}**.`),
],
});
}),
};

View file

@ -1,66 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
// Models
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const baseEmbeds_1 = require("../../../../../../helpers/baseEmbeds");
const checkPermission_1 = __importDefault(require("../../../../../../helpers/checkPermission"));
const take_1 = __importDefault(require("../../../../../../helpers/credits/take"));
const pluralize_1 = __importDefault(require("../../../../../../helpers/pluralize"));
exports.default = {
builder: (command) => {
return command
.setName("take")
.setDescription("Take credits from a user.")
.addUserOption((option) => option
.setName("user")
.setDescription("The user to take credits from.")
.setRequired(true))
.addIntegerOption((option) => option
.setName("amount")
.setDescription(`The amount of credits to take.`)
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Defer reply as ephemeral.
yield (0, deferReply_1.default)(interaction, true);
// 2. Check if the user has the MANAGE_GUILD permission.
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
// 3. Destructure interaction object.
const { guild, options } = interaction;
if (!guild)
throw new Error("Invalid guild.");
if (!options)
throw new Error("Invalid options.");
// 4. Get the user and amount from the options.
const discordReceiver = options.getUser("user");
const optionAmount = options.getInteger("amount");
if (typeof optionAmount !== "number")
throw new Error("Invalid amount.");
if (!discordReceiver)
throw new Error("Invalid user.");
// 5. Create base embeds.
const embedSuccess = yield (0, baseEmbeds_1.success)(guild, "[:toolbox:] Take");
// 6. Take the credits.
yield (0, take_1.default)(guild, discordReceiver, optionAmount);
// 7. Send embed.
return yield interaction.editReply({
embeds: [
embedSuccess.setDescription(`Took ${(0, pluralize_1.default)(optionAmount, "credit")} from ${discordReceiver}.`),
],
});
}),
};

View file

@ -1,73 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
// Models
const discord_js_1 = require("discord.js");
const transfer_1 = __importDefault(require("../../../../../../helpers/credits/transfer"));
// Configurations
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../../../helpers/checkPermission"));
const getEmbedData_1 = __importDefault(require("../../../../../../helpers/getEmbedData"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("transfer")
.setDescription("Transfer credits from one user to another.")
.addUserOption((option) => option
.setName("from")
.setDescription("The user to transfer credits from.")
.setRequired(true))
.addUserOption((option) => option
.setName("to")
.setDescription("The user to transfer credits to.")
.setRequired(true))
.addIntegerOption((option) => option
.setName("amount")
.setDescription(`The amount of credits to transfer.`)
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageGuild);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild); // Destructure member
const { guild, options } = interaction;
// Get options
const optionFromUser = options === null || options === void 0 ? void 0 : options.getUser("from");
const optionToUser = options === null || options === void 0 ? void 0 : options.getUser("to");
const optionAmount = options === null || options === void 0 ? void 0 : options.getInteger("amount");
if (optionAmount === null)
throw new Error("Amount is not specified");
if (optionAmount <= 0)
throw new Error("You need to set amount above zero to transfer.");
if (!guild)
throw new Error(`We could not find this guild.`);
if (!optionFromUser)
throw new Error("You must provide a user to transfer from.");
if (!optionToUser)
throw new Error("You must provide a user to transfer to.");
yield (0, transfer_1.default)(guild, optionFromUser, optionToUser, optionAmount);
return interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [
new discord_js_1.EmbedBuilder()
.setTitle("[:toolbox:] Manage - Credits (Transfer)")
.setDescription(`Transferred ${optionAmount} credits.`)
.setTimestamp(new Date())
.setColor(successColor)
.setFooter({ text: footerText, iconURL: footerIcon }),
],
});
}),
};

View file

@ -1,36 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
// Modules
const prune_1 = __importDefault(require("./modules/prune"));
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("moderation")
.setDescription("Moderation.")
.setDMPermission(false)
.addSubcommand(prune_1.default.builder);
// Execute the command
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
switch (interaction.options.getSubcommand()) {
case "prune": {
yield prune_1.default.execute(interaction);
break;
}
default: {
throw new Error(`Unknown subcommand: ${interaction.options.getSubcommand()}`);
}
}
});
exports.execute = execute;

View file

@ -1,78 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const checkPermission_1 = __importDefault(require("../../../../helpers/checkPermission"));
// Configurations
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("prune")
.setDescription("Prune messages!")
.addIntegerOption((option) => option
.setName("count")
.setDescription("How many messages you want to prune.")
.setRequired(true))
.addBooleanOption((option) => option.setName("bots").setDescription("Include bots."));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
yield (0, deferReply_1.default)(interaction, false);
(0, checkPermission_1.default)(interaction, discord_js_1.PermissionsBitField.Flags.ManageMessages);
const { errorColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const count = interaction.options.getInteger("count");
if (count === null)
return;
const bots = interaction.options.getBoolean("bots");
if (count < 1 || count > 100) {
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:police_car:] Prune")
.setDescription(`You can only prune between 1 and 100 messages.`)
.setTimestamp()
.setColor(errorColor)
.setFooter({ text: footerText, iconURL: footerIcon });
yield interaction.editReply({
embeds: [interactionEmbed],
});
return;
}
if (((_a = interaction === null || interaction === void 0 ? void 0 : interaction.channel) === null || _a === void 0 ? void 0 : _a.type) !== discord_js_1.ChannelType.GuildText)
return;
yield interaction.channel.messages.fetch().then((messages) => __awaiter(void 0, void 0, void 0, function* () {
var _b;
const messagesToDelete = (bots
? messages.filter((m) => { var _a; return ((_a = m === null || m === void 0 ? void 0 : m.interaction) === null || _a === void 0 ? void 0 : _a.id) !== interaction.id; })
: messages.filter((m) => { var _a, _b; return ((_a = m === null || m === void 0 ? void 0 : m.interaction) === null || _a === void 0 ? void 0 : _a.id) !== interaction.id && ((_b = m === null || m === void 0 ? void 0 : m.author) === null || _b === void 0 ? void 0 : _b.bot) !== true; })).first(count);
if (((_b = interaction === null || interaction === void 0 ? void 0 : interaction.channel) === null || _b === void 0 ? void 0 : _b.type) !== discord_js_1.ChannelType.GuildText)
return;
yield interaction.channel
.bulkDelete(messagesToDelete, true)
.then(() => __awaiter(void 0, void 0, void 0, function* () {
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:police_car:] Prune")
.setDescription(`Successfully pruned \`${count}\` messages.`)
.setTimestamp()
.setColor(errorColor)
.setFooter({ text: footerText, iconURL: footerIcon });
yield interaction.editReply({
embeds: [interactionEmbed],
});
}));
}));
}),
};

View file

@ -1,40 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
// Dependencies
const discord_js_1 = require("discord.js");
// Modules
const check_1 = __importDefault(require("./modules/check"));
const repute_1 = __importDefault(require("./modules/repute"));
// Function
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("reputation")
.setDescription("See and repute users to show other how trustworthy they are")
.setDMPermission(false)
// Modules
.addSubcommand(repute_1.default.builder)
.addSubcommand(check_1.default.builder);
// Execute function
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
if (interaction.options.getSubcommand() === "repute") {
yield repute_1.default.execute(interaction);
return;
}
if (interaction.options.getSubcommand() === "check") {
yield check_1.default.execute(interaction);
return;
}
});
exports.execute = execute;

View file

@ -1,96 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("check")
.setDescription("Check reputation")
.addUserOption((option) => option
.setName("account")
.setDescription("The account you checking")
.setRequired(false));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
const { options, guild, user } = interaction;
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(guild);
const optionAccount = options === null || options === void 0 ? void 0 : options.getUser("account");
if (!guild)
throw new Error("Server unavailable");
if (!user)
throw new Error("User unavailable");
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: (optionAccount || user).id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: (optionAccount || user).id,
},
where: {
id: (optionAccount || user).id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
const reputationType = (reputation) => {
if (reputation < 0)
return `negative reputation of ${reputation}`;
if (reputation > 0)
return `positive reputation of ${reputation}`;
return "neutral reputation";
};
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle(optionAccount
? `:loudspeaker:︱Showing ${optionAccount.username}'s reputation`
: ":loudspeaker:︱Showing your reputation")
.setDescription(optionAccount
? `${optionAccount} have a ${reputationType(createGuildMember.user.reputationsEarned)}`
: `You have a ${reputationType(createGuildMember.user.reputationsEarned)}`)
.setTimestamp()
.setColor(successColor)
.setFooter({ text: footerText, iconURL: footerIcon });
yield interaction.editReply({
embeds: [interactionEmbed],
});
}),
};

View file

@ -1,7 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (to, from) => {
if ((from === null || from === void 0 ? void 0 : from.id) === (to === null || to === void 0 ? void 0 : to.id)) {
throw new Error("You can only repute other users");
}
};

View file

@ -1,105 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
const noSelfReputation_1 = __importDefault(require("./components/noSelfReputation"));
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const cooldown_1 = __importDefault(require("../../../../middlewares/cooldown"));
exports.default = {
builder: (command) => {
return command
.setName("repute")
.setDescription("Repute an account")
.addUserOption((option) => option
.setName("account")
.setDescription("The account you repute")
.setRequired(true))
.addStringOption((option) => option
.setName("type")
.setDescription("Type of reputation")
.setRequired(true)
.addChoices({ name: "Positive", value: "positive" }, {
name: "Negative",
value: "negative",
}));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
const { options, user, guild, commandId } = interaction;
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(guild);
const optionAccount = options === null || options === void 0 ? void 0 : options.getUser("account");
const optionType = options === null || options === void 0 ? void 0 : options.getString("type");
if (!guild)
throw new Error("Server unavailable");
if (!optionAccount)
throw new Error("User unavailable");
// Pre-checks
(0, noSelfReputation_1.default)(optionAccount, user);
// Check if user is on cooldown otherwise create one
yield (0, cooldown_1.default)(guild, user, commandId, parseInt(process.env.REPUTATION_TIMEOUT));
switch (optionType) {
case "positive": {
const createUser = yield database_1.default.user.upsert({
where: {
id: optionAccount.id,
},
update: {
reputationsEarned: {
increment: 1,
},
},
create: {
id: optionAccount.id,
reputationsEarned: 1,
},
});
logger_1.default.silly(createUser);
break;
}
case "negative": {
const createUser = yield database_1.default.user.upsert({
where: {
id: optionAccount.id,
},
update: {
reputationsEarned: {
decrement: 1,
},
},
create: {
id: optionAccount.id,
reputationsEarned: -1,
},
});
logger_1.default.silly(createUser);
break;
}
default: {
throw new Error("Invalid reputation type");
}
}
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle(`:loudspeaker:︱Reputing ${optionAccount.username}`)
.setDescription(`You have given a ${optionType} repute to ${optionAccount}!`)
.setTimestamp()
.setColor(successColor)
.setFooter({ text: footerText, iconURL: footerIcon });
yield interaction.editReply({
embeds: [interactionEmbed],
});
}),
};

View file

@ -1,51 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
// Dependencies
const discord_js_1 = require("discord.js");
// Modules
const cpgg_1 = __importDefault(require("./modules/cpgg"));
const roles_1 = __importDefault(require("./modules/roles"));
// Function
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("shop")
.setDescription("Shop for credits and custom roles.")
.setDMPermission(false)
// Modules
.addSubcommand(cpgg_1.default.builder)
.addSubcommandGroup(roles_1.default.builder);
// Execute the command
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
const { options } = interaction;
switch (options.getSubcommand()) {
case "cpgg": {
yield cpgg_1.default.execute(interaction);
break;
}
default: {
throw new Error("Could not find module for that command.");
}
}
switch (options.getSubcommandGroup()) {
case "roles": {
yield roles_1.default.execute(interaction);
break;
}
default: {
throw new Error("Could not find module for that command.");
}
}
});
exports.execute = execute;

View file

@ -1,175 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const discord_js_1 = require("discord.js");
const uuid_1 = require("uuid");
const database_1 = __importDefault(require("../../../../handlers/database"));
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const encryption_1 = __importDefault(require("../../../../helpers/encryption"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
builder: (command) => {
return command
.setName("cpgg")
.setDescription("Buy cpgg power.")
.addIntegerOption((option) => option
.setName("amount")
.setDescription("How much credits you want to withdraw.")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b, _c, _d;
yield (0, deferReply_1.default)(interaction, true);
const { errorColor, successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild, user, client } = interaction;
const optionAmount = options === null || options === void 0 ? void 0 : options.getInteger("amount");
if (optionAmount === null) {
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Amount is null.`);
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:dollar:] Gift")
.setDescription("We could not read your requested amount.")
.setTimestamp()
.setColor(errorColor)
.setFooter({ text: footerText, iconURL: footerIcon });
return interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
});
}
if (!guild)
throw new Error("Guild not found");
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
const dmUser = (_b = (_a = client === null || client === void 0 ? void 0 : client.users) === null || _a === void 0 ? void 0 : _a.cache) === null || _b === void 0 ? void 0 : _b.get(user === null || user === void 0 ? void 0 : user.id);
if ((optionAmount || createGuildMember.creditsEarned) < 100)
throw new Error("You can't withdraw to CPGG below 100 credits.");
if ((optionAmount || createGuildMember.creditsEarned) > 1000000)
throw new Error("Amount or user credits is above 1.000.000.");
if (createGuildMember.creditsEarned < optionAmount)
throw new Error("You can't withdraw more than you have on your account.");
if (!createGuildMember.guild.apiCpggUrlIv ||
!createGuildMember.guild.apiCpggUrlContent)
throw new Error("No API url available");
if (!createGuildMember.guild.apiCpggTokenIv ||
!createGuildMember.guild.apiCpggTokenContent)
throw new Error("No API token available");
const code = (0, uuid_1.v4)();
const url = encryption_1.default.decrypt({
iv: createGuildMember.guild.apiCpggUrlIv,
content: createGuildMember.guild.apiCpggUrlContent,
});
const api = axios_1.default === null || axios_1.default === void 0 ? void 0 : axios_1.default.create({
baseURL: `${url}/api/`,
headers: {
Authorization: `Bearer ${encryption_1.default.decrypt({
iv: createGuildMember.guild.apiCpggTokenIv,
content: createGuildMember.guild.apiCpggTokenContent,
})}`,
},
});
const shopUrl = `${url}/store`;
const buttons = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
.setLabel("Redeem it here")
.setStyle(discord_js_1.ButtonStyle.Link)
.setEmoji("🏦")
.setURL(`${shopUrl}?voucher=${code}`));
yield ((_d = api === null || api === void 0 ? void 0 : api.post("vouchers", {
uses: 1,
code,
credits: optionAmount || createGuildMember.creditsEarned,
memo: `${interaction === null || interaction === void 0 ? void 0 : interaction.createdTimestamp} - ${(_c = interaction === null || interaction === void 0 ? void 0 : interaction.user) === null || _c === void 0 ? void 0 : _c.id}`,
})) === null || _d === void 0 ? void 0 : _d.then(() => __awaiter(void 0, void 0, void 0, function* () {
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Successfully created voucher.`);
createGuildMember.creditsEarned -=
optionAmount || createGuildMember.creditsEarned;
const updateGuildMember = yield database_1.default.guildMember.update({
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
data: {
creditsEarned: {
decrement: optionAmount || createGuildMember.creditsEarned,
},
},
});
logger_1.default.silly(updateGuildMember);
if (!interaction.guild)
throw new Error("Guild is undefined");
const dmEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:shopping_cart:] CPGG")
.setDescription(`This voucher comes from **${interaction.guild.name}**.`)
.setTimestamp()
.addFields({
name: "💶 Credits",
value: `${optionAmount || createGuildMember.creditsEarned}`,
inline: true,
})
.setColor(successColor)
.setFooter({ text: footerText, iconURL: footerIcon });
yield (dmUser === null || dmUser === void 0 ? void 0 : dmUser.send({
embeds: [dmEmbed],
components: [buttons],
}).then((msg) => __awaiter(void 0, void 0, void 0, function* () {
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:shopping_cart:] CPGG")
.setDescription(`I have sent you the code in [DM](${msg.url})!`)
.setTimestamp()
.setColor(successColor)
.setFooter({ text: footerText, iconURL: footerIcon });
yield (interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
}));
})));
})));
return true;
}),
};

View file

@ -1,47 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Handlers
// Modules
const buy_1 = __importDefault(require("./modules/buy"));
const cancel_1 = __importDefault(require("./modules/cancel"));
const database_1 = __importDefault(require("../../../../handlers/database"));
exports.default = {
builder: (group) => {
return (group
.setName("roles")
.setDescription("Shop for custom roles.")
// Modules
.addSubcommand(buy_1.default.builder)
.addSubcommand(cancel_1.default.builder));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
if (!interaction.guild)
return;
const { options, guild } = interaction;
const getGuild = yield database_1.default.guild.findUnique({
where: { id: guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
if (!getGuild.shopRolesEnabled)
throw new Error("This server has disabled shop roles.");
if ((options === null || options === void 0 ? void 0 : options.getSubcommand()) === "buy") {
yield buy_1.default.execute(interaction);
}
if ((options === null || options === void 0 ? void 0 : options.getSubcommand()) === "cancel") {
yield cancel_1.default.execute(interaction);
}
}),
};

View file

@ -1,162 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
// Helpers
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const getEmbedData_1 = __importDefault(require("../../../../../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../../../../../middlewares/logger"));
// Configurations
// import fetchUser from "../../../../../../helpers/userData";
// Models
const database_1 = __importDefault(require("../../../../../../handlers/database"));
const pluralize_1 = __importDefault(require("../../../../../../helpers/pluralize"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("buy")
.setDescription("Buy a custom role.")
.addStringOption((option) => option
.setName("name")
.setDescription("Name of the role you wish to buy.")
.setRequired(true))
.addStringOption((option) => option
.setName("color")
.setDescription("Color of the role you wish to buy.")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, true);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild, user, member } = interaction;
const optionName = options === null || options === void 0 ? void 0 : options.getString("name");
const optionColor = options === null || options === void 0 ? void 0 : options.getString("color");
// If amount is null
if (optionName === null)
throw new Error("We could not read your requested name");
yield (guild === null || guild === void 0 ? void 0 : guild.roles.create({
name: optionName,
color: optionColor,
reason: `${user === null || user === void 0 ? void 0 : user.id} bought from shop`,
}).then((role) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
const userId = "SNOWFLKAE";
const guildId = "SNOWFLAKE";
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId,
guildId,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: userId,
},
where: {
id: userId,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guildId,
},
where: {
id: guildId,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
// Get guild object
const pricePerHour = createGuildMember.guild.shopRolesPricePerHour;
const updateGuildMember = yield database_1.default.guildMember.update({
where: {
userId_guildId: {
userId,
guildId,
},
},
data: {
creditsEarned: { decrement: pricePerHour },
},
});
logger_1.default.silly(updateGuildMember);
const createShopRole = yield database_1.default.guildShopRoles.upsert({
where: {
guildId_userId_roleId: {
guildId: guild.id,
userId: user.id,
roleId: role.id,
},
},
update: {},
create: {
roleId: role.id,
lastPayed: new Date(),
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createShopRole);
yield ((_a = member === null || member === void 0 ? void 0 : member.roles) === null || _a === void 0 ? void 0 : _a.add(role === null || role === void 0 ? void 0 : role.id));
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Role ${role === null || role === void 0 ? void 0 : role.name} was bought by ${user === null || user === void 0 ? void 0 : user.tag}`);
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:shopping_cart:] Buy")
.setDescription(`You bought **${optionName}** for **${(0, pluralize_1.default)(pricePerHour, "credit")}**.`)
.setTimestamp()
.setColor(successColor)
.setFooter({ text: footerText, iconURL: footerIcon });
return interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
});
})).catch(() => {
throw new Error("Failed creating role.");
}));
}),
};

View file

@ -1,126 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
// Helpers
const discord_js_1 = require("discord.js");
// Configurations
// Models
const deferReply_1 = __importDefault(require("../../../../../../handlers/deferReply"));
const logger_1 = __importDefault(require("../../../../../../middlewares/logger"));
// Configurations
// Models
const database_1 = __importDefault(require("../../../../../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../../../../../helpers/getEmbedData"));
const pluralize_1 = __importDefault(require("../../../../../../helpers/pluralize"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("cancel")
.setDescription("Cancel a purchase.")
.addRoleOption((option) => option
.setName("role")
.setDescription("Role you wish to cancel.")
.setRequired(true));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
yield (0, deferReply_1.default)(interaction, true);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const { options, guild, user, member } = interaction;
const optionRole = options.getRole("role");
if (optionRole === null)
throw new Error("We could not read your requested role.");
if (!guild)
throw new Error("No guild specified");
if (!user)
throw new Error("No user specified");
const roleExist = yield database_1.default.guildShopRoles.findUnique({
where: {
guildId_userId_roleId: {
guildId: guild.id,
userId: user.id,
roleId: optionRole.id,
},
},
});
if (roleExist === null)
return;
yield ((_a = member === null || member === void 0 ? void 0 : member.roles) === null || _a === void 0 ? void 0 : _a.remove(optionRole === null || optionRole === void 0 ? void 0 : optionRole.id));
yield (guild === null || guild === void 0 ? void 0 : guild.roles.delete(optionRole === null || optionRole === void 0 ? void 0 : optionRole.id, `${user === null || user === void 0 ? void 0 : user.id} canceled from shop`).then(() => __awaiter(void 0, void 0, void 0, function* () {
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
if (!createGuildMember)
throw new Error("Guild member not created");
const deleteShopRole = yield database_1.default.guildShopRoles.delete({
where: {
guildId_userId_roleId: {
guildId: guild === null || guild === void 0 ? void 0 : guild.id,
userId: user === null || user === void 0 ? void 0 : user.id,
roleId: optionRole === null || optionRole === void 0 ? void 0 : optionRole.id,
},
},
});
logger_1.default.silly(deleteShopRole);
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setTitle("[:shopping_cart:] Cancel")
.setDescription(`You have canceled ${optionRole.name}.`)
.setTimestamp()
.setColor(successColor)
.addFields({
name: "Your balance",
value: `${(0, pluralize_1.default)(createGuildMember.creditsEarned, "credit")}`,
})
.setFooter({ text: footerText, iconURL: footerIcon });
return interaction === null || interaction === void 0 ? void 0 : interaction.editReply({
embeds: [interactionEmbed],
});
})));
}),
};

View file

@ -1,39 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.builder = void 0;
const discord_js_1 = require("discord.js");
// Modules
const about_1 = __importDefault(require("./modules/about"));
const avatar_1 = __importDefault(require("./modules/avatar"));
exports.builder = new discord_js_1.SlashCommandBuilder()
.setName("utils")
.setDescription("Common utility.")
// Modules
.addSubcommand(about_1.default.builder)
.addSubcommand(avatar_1.default.builder);
// Execute the command
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
switch (interaction.options.getSubcommand()) {
case "about":
yield about_1.default.execute(interaction);
break;
case "avatar":
yield avatar_1.default.execute(interaction);
break;
default:
throw new Error(`Unknown subcommand: ${interaction.options.getSubcommand()}`);
}
});
exports.execute = execute;

View file

@ -1,101 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable no-loops/no-loops */
// Dependencies
const date_fns_1 = require("date-fns");
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
// Configurations
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
// Function
exports.default = {
builder: (command) => {
return command
.setName("about")
.setDescription("Check information about this instance");
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, false);
if (!interaction.guild)
throw new Error("You need to be in a guild");
const { client } = interaction;
// await cooldown(
// interaction.guild,
// interaction.user,
// interaction.commandId,
// 3600
// );
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
// // Initialize a storage for the user ids
// const userIds = new Set();
// // Iterate over all guilds (always cached)
// for await (const guild of client.guilds.cache.values()) {
// // Fetch all guild members and iterate over them
// for await (const member of (await guild.members.fetch()).values()) {
// // Fetch the user, if user already cached, returns value from cache
// // Will probably always return from cache
// const user = await client.users.fetch(member.id);
// // Check if user id is not already in set and user is not a bot
// if (!userIds.has(user.id) && !user.bot) {
// // Add unique user id to our set
// userIds.add(user.id);
// }
// }
// }
const buttons = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
.setLabel("Support")
.setStyle(discord_js_1.ButtonStyle.Link)
.setEmoji("💬")
.setURL("https://discord.zyner.org"), new discord_js_1.ButtonBuilder()
.setLabel("Documentation")
.setStyle(discord_js_1.ButtonStyle.Link)
.setEmoji("📚")
.setURL("https://xyter.zyner.org"));
const interactionEmbed = new discord_js_1.EmbedBuilder()
.setColor(successColor)
.setTitle(":toolbox:︱About this instance")
.setDescription(`This bot instance is hosted by [${process.env.BOT_HOSTER_NAME}](${process.env.BOT_HOSTER_URL}) who might have modified the [source code](https://github.com/ZynerOrg/xyter).`)
.setFields({
name: "Latency",
value: `${Math.round(client.ws.ping)} ms`,
inline: true,
}, {
name: "Servers (cached)",
value: `${client.guilds.cache.size}`,
inline: true,
}, {
name: "Users (cached)",
value: `${client.guilds.cache.reduce((a, g) => a + g.memberCount, 0)}`,
inline: true,
}, {
name: "Version",
value: `[${process.env.npm_package_version}](https://github.com/ZynerOrg/xyter/releases/tag/${process.env.npm_package_version})`,
inline: true,
}, {
name: "Since last restart",
value: `${(0, date_fns_1.formatDuration)((0, date_fns_1.intervalToDuration)({
start: (0, date_fns_1.subMilliseconds)(new Date(), client.uptime),
end: new Date(),
}))}`,
inline: true,
})
.setTimestamp()
.setFooter({ text: footerText, iconURL: footerIcon });
yield interaction.editReply({
embeds: [interactionEmbed],
components: [buttons],
});
}),
};

View file

@ -1,48 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const deferReply_1 = __importDefault(require("../../../../handlers/deferReply"));
const getEmbedData_1 = __importDefault(require("../../../../helpers/getEmbedData"));
exports.default = {
builder: (command) => {
return command
.setName("avatar")
.setDescription("Check someones avatar!)")
.addUserOption((option) => option
.setName("user")
.setDescription("The user whose avatar you want to check"));
},
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, deferReply_1.default)(interaction, false);
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
const userOption = interaction.options.getUser("user");
const targetUser = userOption || interaction.user;
const embed = new discord_js_1.EmbedBuilder()
.setTitle(":toolbox:︱Avatar")
.setTimestamp(new Date())
.setFooter({ text: footerText, iconURL: footerIcon });
const avatarUrl = targetUser.displayAvatarURL();
return interaction.editReply({
embeds: [
embed
.setDescription(userOption
? `You can also [download it here](${avatarUrl})!`
: `Your avatar is available to [download here](${avatarUrl}).`)
.setThumbnail(avatarUrl)
.setColor(successColor),
],
});
}),
};

View file

@ -1,60 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const database_1 = __importDefault(require("../../handlers/database"));
const updatePresence_1 = __importDefault(require("../../handlers/updatePresence"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.options = {
type: "on",
};
// Execute the function
const execute = (guild) => __awaiter(void 0, void 0, void 0, function* () {
const { client } = guild;
(0, updatePresence_1.default)(client);
// Create guildMember object
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: guild.ownerId,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: guild.ownerId,
},
where: {
id: guild.ownerId,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
});
logger_1.default.silly(createGuildMember);
});
exports.execute = execute;

View file

@ -1,43 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const database_1 = __importDefault(require("../../handlers/database"));
const updatePresence_1 = __importDefault(require("../../handlers/updatePresence"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.options = {
type: "on",
};
// Execute the function
const execute = (guild) => __awaiter(void 0, void 0, void 0, function* () {
const { client } = guild;
(0, updatePresence_1.default)(client);
// Delete guildMember objects
const deleteGuildMembers = database_1.default.guildMember.deleteMany({
where: {
guildId: guild.id,
},
});
// Delete guild object
const deleteGuild = database_1.default.guild.deleteMany({
where: {
id: guild.id,
},
});
// The transaction runs synchronously so deleteUsers must run last.
yield database_1.default.$transaction([deleteGuildMembers, deleteGuild]);
logger_1.default.silly(deleteGuildMembers);
logger_1.default.silly(deleteGuild);
});
exports.execute = execute;

View file

@ -1,71 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = {
execute: (member) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
const { client, guild } = member;
const getGuild = yield database_1.default.guild.findUnique({
where: { id: member.guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
if (getGuild.auditsEnabled !== true)
return;
if (!getGuild.auditsChannelId) {
throw new Error("Channel not found");
}
const embedConfig = yield (0, getEmbedData_1.default)(guild);
const channel = client.channels.cache.get(getGuild.auditsChannelId);
if (!channel)
throw new Error("Channel not found");
if (channel.type !== discord_js_1.ChannelType.GuildText) {
throw new Error("Channel must be a text channel");
}
const embed = new discord_js_1.EmbedBuilder()
.setTimestamp(new Date())
.setAuthor({
name: "Member Joined",
iconURL: (_a = client.user) === null || _a === void 0 ? void 0 : _a.displayAvatarURL(),
})
.setFooter({
text: embedConfig.footerText,
iconURL: embedConfig.footerIcon,
});
yield channel
.send({
embeds: [
embed
.setColor(embedConfig.successColor)
.setDescription(`${member.user} - (${member.user.tag})`)
.addFields([
{
name: "Account Age",
value: `${member.user.createdAt}`,
},
]),
],
})
.then(() => {
logger_1.default.debug(`Audit log sent for event guildMemberAdd`);
})
.catch(() => {
throw new Error("Audit log failed to send");
});
}),
};

View file

@ -1,65 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const database_1 = __importDefault(require("../../handlers/database"));
const updatePresence_1 = __importDefault(require("../../handlers/updatePresence"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
const audits_1 = __importDefault(require("./audits"));
const joinMessage_1 = __importDefault(require("./joinMessage"));
exports.options = {
type: "on",
};
// Execute the function
const execute = (member) => __awaiter(void 0, void 0, void 0, function* () {
const { client, user, guild } = member;
logger_1.default.silly(`New member: ${user.tag} (${user.id}) added to guild: ${guild.name} (${guild.id})`);
yield audits_1.default.execute(member);
yield joinMessage_1.default.execute(member);
(0, updatePresence_1.default)(client);
// Create guildMember object
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
});
logger_1.default.silly(createGuildMember);
});
exports.execute = execute;

View file

@ -1,52 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
exports.default = {
execute: (member) => __awaiter(void 0, void 0, void 0, function* () {
const { footerText, footerIcon, successColor } = yield (0, getEmbedData_1.default)(member.guild);
const getGuild = yield database_1.default.guild.findUnique({
where: { id: member.guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
const { client } = member;
if (getGuild.welcomeEnabled !== true)
return;
if (!getGuild.welcomeJoinChannelId)
return;
const channel = client.channels.cache.get(`${getGuild.welcomeJoinChannelId}`);
if (!channel)
throw new Error("Channel not found");
if (channel.type !== discord_js_1.ChannelType.GuildText)
throw new Error("Channel is not a text channel");
channel.send({
embeds: [
new discord_js_1.EmbedBuilder()
.setColor(successColor)
.setTitle(`${member.user.username} has joined the server!`)
.setThumbnail(member.user.displayAvatarURL())
.setDescription(getGuild.welcomeJoinChannelMessage ||
"Configure a join message in the `/settings guild welcome`.")
.setTimestamp()
.setFooter({
text: footerText,
iconURL: footerIcon,
}),
],
});
}),
};

View file

@ -1,69 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = {
execute: (member) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
const { client, guild } = member;
const getGuild = yield database_1.default.guild.findUnique({
where: { id: member.guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
if (getGuild.auditsEnabled !== true)
return;
if (!getGuild.auditsChannelId) {
throw new Error("Channel not found");
}
const embedConfig = yield (0, getEmbedData_1.default)(guild);
const channel = client.channels.cache.get(getGuild.auditsChannelId);
if ((channel === null || channel === void 0 ? void 0 : channel.type) !== discord_js_1.ChannelType.GuildText) {
throw new Error("Channel must be a text channel");
}
const embed = new discord_js_1.EmbedBuilder()
.setTimestamp(new Date())
.setAuthor({
name: "Member Left",
iconURL: (_a = client.user) === null || _a === void 0 ? void 0 : _a.displayAvatarURL(),
})
.setFooter({
text: embedConfig.footerText,
iconURL: embedConfig.footerIcon,
});
channel
.send({
embeds: [
embed
.setColor(embedConfig.errorColor)
.setDescription(`${member.user} - (${member.user.tag})`)
.addFields([
{
name: "Account Age",
value: `${member.user.createdAt}`,
},
]),
],
})
.then(() => {
logger_1.default.debug(`Audit log sent for event guildMemberRemove.`);
})
.catch(() => {
throw new Error("Audit log failed to send");
});
}),
};

View file

@ -1,40 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const database_1 = __importDefault(require("../../handlers/database"));
const updatePresence_1 = __importDefault(require("../../handlers/updatePresence"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
const audits_1 = __importDefault(require("./audits"));
const leaveMessage_1 = __importDefault(require("./leaveMessage"));
exports.options = {
type: "on",
};
// Execute the function
const execute = (member) => __awaiter(void 0, void 0, void 0, function* () {
const { client, user, guild } = member;
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Removed member: ${user.tag} (${user.id}) from guild: ${guild.name} (${guild.id})`);
yield audits_1.default.execute(member);
yield leaveMessage_1.default.execute(member);
(0, updatePresence_1.default)(client);
// Delete guildMember object
const deleteGuildMember = yield database_1.default.guildMember.deleteMany({
where: {
userId: user.id,
guildId: guild.id,
},
});
logger_1.default.silly(deleteGuildMember);
});
exports.execute = execute;

View file

@ -1,52 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
exports.default = {
execute: (member) => __awaiter(void 0, void 0, void 0, function* () {
const { footerText, footerIcon, errorColor } = yield (0, getEmbedData_1.default)(member.guild);
const getGuild = yield database_1.default.guild.findUnique({
where: { id: member.guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
const { client } = member;
if (getGuild.welcomeEnabled !== true)
return;
if (!getGuild.welcomeLeaveChannelId)
return;
const channel = client.channels.cache.get(`${getGuild.welcomeLeaveChannelId}`);
if (!channel)
throw new Error("Channel not found");
if (channel.type !== discord_js_1.ChannelType.GuildText)
throw new Error("Channel is not a text channel");
channel.send({
embeds: [
new discord_js_1.EmbedBuilder()
.setColor(errorColor)
.setTitle(`${member.user.username} has left the server!`)
.setThumbnail(member.user.displayAvatarURL())
.setDescription(getGuild.welcomeLeaveChannelMessage ||
"Configure a leave message in the `/settings guild welcome`.")
.setTimestamp()
.setFooter({
text: footerText,
iconURL: footerIcon,
}),
],
});
}),
};

View file

@ -1,68 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = {
execute: (interaction) => __awaiter(void 0, void 0, void 0, function* () {
if (interaction === null)
return;
if (interaction.guild === null)
return;
const getGuild = yield database_1.default.guild.findUnique({
where: { id: interaction.guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
const { footerText, footerIcon, successColor } = yield (0, getEmbedData_1.default)(interaction.guild);
const { client } = interaction;
if (getGuild.auditsEnabled !== true)
return;
if (!getGuild.auditsChannelId)
return;
const channel = client.channels.cache.get(`${getGuild.auditsChannelId}`);
if (!channel)
return;
if (channel.type !== discord_js_1.ChannelType.GuildText)
return;
channel
.send({
embeds: [
new discord_js_1.EmbedBuilder()
.setColor(successColor)
.setDescription(`
**Interaction created by** ${interaction.user.username} **in** ${interaction.channel}
**Interaction ID**: ${interaction.id}
**Type**: ${interaction.type}
**User ID**: ${interaction.user.id}
`)
.setThumbnail(interaction.user.displayAvatarURL())
.setTimestamp()
.setFooter({
text: footerText,
iconURL: footerIcon,
}),
],
})
.then(() => {
var _a, _b;
logger_1.default.debug(`Audit log sent for event interactionCreate in guild ${(_a = interaction === null || interaction === void 0 ? void 0 : interaction.guild) === null || _a === void 0 ? void 0 : _a.name} (${(_b = interaction === null || interaction === void 0 ? void 0 : interaction.guild) === null || _b === void 0 ? void 0 : _b.id})`);
})
.catch(() => {
logger_1.default.silly("Failed to send audit log for event interactionCreate");
});
}),
};

View file

@ -1,44 +0,0 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
if (!interaction.isButton())
return;
const { customId } = interaction;
const currentButton = yield (_a = `../../../buttons/${customId}`, Promise.resolve().then(() => __importStar(require(_a))));
if (!currentButton)
throw new Error(`Unknown button ${customId}`);
yield currentButton.execute(interaction);
});

View file

@ -1,20 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
if (!interaction.isCommand())
return;
const { client, commandName } = interaction;
const currentCommand = client.commands.get(commandName);
if (!currentCommand)
throw new Error(`Unknown command ${commandName}`);
yield currentCommand.execute(interaction);
});

View file

@ -1,48 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleCommandInteraction = exports.execute = void 0;
const discord_js_1 = require("discord.js");
const getEmbedData_1 = __importDefault(require("../../../helpers/getEmbedData"));
const button_1 = __importDefault(require("./button"));
const command_1 = __importDefault(require("./command"));
// Send interactions to all available handlers
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
yield (0, button_1.default)(interaction);
yield (0, command_1.default)(interaction);
});
exports.execute = execute;
// Handle interactions from commands
const handleCommandInteraction = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
const { errorColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(interaction.guild);
yield (0, command_1.default)(interaction).catch((err) => {
const buttons = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
.setLabel("Report Problem")
.setStyle(discord_js_1.ButtonStyle.Link)
.setEmoji("📝")
.setURL("https://discord.zyner.org"));
return interaction.editReply({
embeds: [
new discord_js_1.EmbedBuilder()
.setTitle(`:no_entry_sign:︱Your request failed`)
.setDescription(`${err.message}`)
.setColor(errorColor)
.setTimestamp(new Date())
.setFooter({ text: footerText, iconURL: footerIcon }),
],
components: [buttons],
});
});
});
exports.handleCommandInteraction = handleCommandInteraction;

View file

@ -1,38 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
// 3rd party dependencies
const discord_js_1 = require("discord.js");
const logger_1 = __importDefault(require("../../middlewares/logger"));
// Dependencies
const audits_1 = __importDefault(require("./audits"));
const handlers_1 = require("./handlers");
exports.options = {
type: "on",
};
// Execute the event
const execute = (interaction) => __awaiter(void 0, void 0, void 0, function* () {
const { guild, id } = interaction;
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`New interaction: ${id} in guild: ${guild === null || guild === void 0 ? void 0 : guild.name} (${guild === null || guild === void 0 ? void 0 : guild.id})`);
switch (interaction.type) {
case discord_js_1.InteractionType.ApplicationCommand:
yield (0, handlers_1.handleCommandInteraction)(interaction);
break;
default:
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.error(`Unknown interaction type: ${interaction.type}`);
}
yield audits_1.default.execute(interaction);
});
exports.execute = execute;

View file

@ -1,26 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const modules_1 = __importDefault(require("./modules"));
exports.options = {
type: "on",
};
// Execute the function
const execute = (message) => __awaiter(void 0, void 0, void 0, function* () {
yield modules_1.default.credits.execute(message);
yield modules_1.default.points.execute(message);
yield modules_1.default.counters.execute(message);
});
exports.execute = execute;

View file

@ -1,69 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
execute: (message) => __awaiter(void 0, void 0, void 0, function* () {
const { guild, author, content, channel } = message;
if (!guild)
return;
if (author.bot)
return;
if ((channel === null || channel === void 0 ? void 0 : channel.type) !== discord_js_1.ChannelType.GuildText)
return;
const messages = yield message.channel.messages.fetch({ limit: 2 });
const lastMessage = messages.last();
const channelCounter = yield database_1.default.guildCounter.findUnique({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: channel.id,
},
},
});
if (!channelCounter) {
logger_1.default.debug("No counters found in channel.");
return;
}
if ((lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.author.id) === author.id &&
channel.id === channelCounter.channelId) {
logger_1.default.silly(`${author.username} sent the last message therefor not allowing again.`);
yield message.delete();
return false;
}
if (content !== channelCounter.triggerWord) {
logger_1.default.silly(`Counter word ${channelCounter.triggerWord} does not match message ${content}`);
yield message.delete();
return false;
}
const updateGuildCounter = yield database_1.default.guildCounter.update({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: channel.id,
},
},
data: {
count: {
increment: 1,
},
},
});
logger_1.default.silly(updateGuildCounter);
if (!updateGuildCounter)
logger_1.default.error(`Failed to update counter - ${updateGuildCounter}`);
}),
};

View file

@ -1,70 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const give_1 = __importDefault(require("../../../../helpers/credits/give"));
const cooldown_1 = __importDefault(require("../../../../middlewares/cooldown"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
execute: (message) => __awaiter(void 0, void 0, void 0, function* () {
const { guild, author, content, channel } = message;
if (!guild)
return;
if (author.bot)
return;
if (channel.type !== discord_js_1.ChannelType.GuildText)
return;
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: author.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: author.id,
},
where: {
id: author.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
if (content.length < createGuildMember.guild.creditsMinimumLength)
return;
yield (0, cooldown_1.default)(guild, author, "event-messageCreate-credits", createGuildMember.guild.creditsTimeout, true);
yield (0, give_1.default)(guild, author, createGuildMember.guild.creditsRate);
}),
};

View file

@ -1,13 +0,0 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const counters_1 = __importDefault(require("./counters"));
const credits_1 = __importDefault(require("./credits"));
const points_1 = __importDefault(require("./points"));
exports.default = {
counters: counters_1.default,
credits: credits_1.default,
points: points_1.default,
};

View file

@ -1,84 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../../../handlers/database"));
const cooldown_1 = __importDefault(require("../../../../middlewares/cooldown"));
const logger_1 = __importDefault(require("../../../../middlewares/logger"));
exports.default = {
execute: (message) => __awaiter(void 0, void 0, void 0, function* () {
const { guild, author, content, channel } = message;
if (!guild)
return;
if (author.bot)
return;
if (channel.type !== discord_js_1.ChannelType.GuildText)
return;
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: author.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: author.id,
},
where: {
id: author.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
if (content.length < createGuildMember.guild.pointsMinimumLength)
return;
yield (0, cooldown_1.default)(guild, author, "event-messageCreate-points", createGuildMember.guild.pointsTimeout, true);
const updateGuildMember = yield database_1.default.guildMember.update({
where: {
userId_guildId: {
userId: author.id,
guildId: guild.id,
},
},
data: {
pointsEarned: {
increment: createGuildMember.guild.pointsRate,
},
},
});
logger_1.default.silly(updateGuildMember);
if (!updateGuildMember)
throw new Error("Failed to update guildMember object");
}),
};

View file

@ -1,72 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = {
execute: (message) => __awaiter(void 0, void 0, void 0, function* () {
if (message === null)
return;
if (message.guild === null)
return;
const { footerText, footerIcon, successColor } = yield (0, getEmbedData_1.default)(message.guild);
const getGuild = yield database_1.default.guild.findUnique({
where: { id: message.guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
const { client } = message;
if (!getGuild)
throw new Error("Guild not found");
if (getGuild.auditsEnabled !== true)
return;
if (!getGuild.auditsChannelId)
return;
const channel = client.channels.cache.get(`${getGuild.auditsChannelId}`);
if (!channel)
return;
if (channel.type !== discord_js_1.ChannelType.GuildText)
return;
channel
.send({
embeds: [
new discord_js_1.EmbedBuilder()
.setColor(successColor)
.setAuthor({
name: message.author.username,
iconURL: message.author.displayAvatarURL(),
})
.setDescription(`
**Message sent by** ${message.author} **deleted in** ${message.channel}
${message.content}
`)
.setTimestamp()
.setFooter({
text: footerText,
iconURL: footerIcon,
}),
],
})
.then(() => {
var _a, _b;
logger_1.default.info(`Audit log sent for event messageDelete in guild ${(_a = message === null || message === void 0 ? void 0 : message.guild) === null || _a === void 0 ? void 0 : _a.name} (${(_b = message === null || message === void 0 ? void 0 : message.guild) === null || _b === void 0 ? void 0 : _b.id})`);
})
.catch(() => {
var _a, _b;
throw new Error(`Audit log failed to send for event messageDelete in guild ${(_a = message === null || message === void 0 ? void 0 : message.guild) === null || _a === void 0 ? void 0 : _a.name} (${(_b = message === null || message === void 0 ? void 0 : message.guild) === null || _b === void 0 ? void 0 : _b.id})`);
});
}),
};

View file

@ -1,26 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const audits_1 = __importDefault(require("./audits"));
const counter_1 = __importDefault(require("./modules/counter"));
exports.options = {
type: "on",
};
// Execute the function
const execute = (message) => __awaiter(void 0, void 0, void 0, function* () {
yield audits_1.default.execute(message);
yield (0, counter_1.default)(message);
});
exports.execute = execute;

View file

@ -1,45 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Models
const database_1 = __importDefault(require("../../../handlers/database"));
const logger_1 = __importDefault(require("../../../middlewares/logger"));
exports.default = (message) => __awaiter(void 0, void 0, void 0, function* () {
const { guild, channel, author, content } = message;
if (!guild)
throw new Error("Guild not found");
if (!channel)
throw new Error("Channel not found");
const channelCounter = yield database_1.default.guildCounter.findUnique({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: channel.id,
},
},
});
if (!channelCounter)
throw new Error("No counter found in channel.");
const messages = yield message.channel.messages.fetch({ limit: 1 });
const lastMessage = messages.last();
if (!lastMessage)
return;
if (content !== channelCounter.triggerWord)
return;
if (lastMessage.author.id === message.author.id)
return;
channel === null || channel === void 0 ? void 0 : channel.send(`${author} said **${channelCounter.triggerWord}**.`);
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`${author} said ${channelCounter.triggerWord} in ${channel}`);
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`User: ${author === null || author === void 0 ? void 0 : author.tag} (${author === null || author === void 0 ? void 0 : author.id}) in guild: ${guild === null || guild === void 0 ? void 0 : guild.name} (${guild === null || guild === void 0 ? void 0 : guild.id}) said the counter word: ${channelCounter.triggerWord}`);
});

View file

@ -1,74 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable no-loops/no-loops */
const discord_js_1 = require("discord.js");
const database_1 = __importDefault(require("../../handlers/database"));
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = {
execute: (oldMessage, newMessage) => __awaiter(void 0, void 0, void 0, function* () {
if (oldMessage === null)
return;
if (newMessage === null)
return;
if (oldMessage.guild === null)
return;
if (newMessage.guild === null)
return;
const { footerText, footerIcon, successColor } = yield (0, getEmbedData_1.default)(newMessage.guild);
const getGuild = yield database_1.default.guild.findUnique({
where: { id: oldMessage.guild.id },
});
if (!getGuild)
throw new Error("Guild not found");
const { client } = oldMessage;
if (getGuild.auditsEnabled !== true)
return;
if (!getGuild.auditsChannelId)
return;
const channel = client.channels.cache.get(`${getGuild.auditsChannelId}`);
if (!channel)
return;
if (channel.type !== discord_js_1.ChannelType.GuildText)
return;
channel
.send({
embeds: [
new discord_js_1.EmbedBuilder()
.setColor(successColor)
.setAuthor({
name: newMessage.author.username,
iconURL: newMessage.author.displayAvatarURL(),
})
.setDescription(`
**Message edited in** ${newMessage.channel} [jump to message](https://discord.com/channels/${newMessage.guild.id}/${newMessage.channel.id}/${newMessage.id})
`)
.setTimestamp()
.setFooter({
text: footerText,
iconURL: footerIcon,
}),
],
})
.then(() => {
var _a, _b;
logger_1.default.info(`Audit log sent for event messageUpdate in guild ${(_a = newMessage === null || newMessage === void 0 ? void 0 : newMessage.guild) === null || _a === void 0 ? void 0 : _a.name} (${(_b = newMessage === null || newMessage === void 0 ? void 0 : newMessage.guild) === null || _b === void 0 ? void 0 : _b.id})`);
})
.catch(() => {
var _a, _b;
throw new Error(`Audit log failed to send for event messageUpdate in guild ${(_a = newMessage === null || newMessage === void 0 ? void 0 : newMessage.guild) === null || _a === void 0 ? void 0 : _a.name} (${(_b = newMessage === null || newMessage === void 0 ? void 0 : newMessage.guild) === null || _b === void 0 ? void 0 : _b.id})`);
});
}),
};

View file

@ -1,33 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const logger_1 = __importDefault(require("../../middlewares/logger"));
// Modules
const counter_1 = __importDefault(require("./modules/counter"));
const audits_1 = __importDefault(require("./audits"));
exports.options = {
type: "on",
};
// Execute the function
const execute = (oldMessage, newMessage) => __awaiter(void 0, void 0, void 0, function* () {
const { author, guild } = newMessage;
yield audits_1.default.execute(oldMessage, newMessage);
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Message update event fired by ${author.tag} (${author.id}) in guild: ${guild === null || guild === void 0 ? void 0 : guild.name} (${guild === null || guild === void 0 ? void 0 : guild.id})`);
if (author === null || author === void 0 ? void 0 : author.bot)
return logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Message update event fired by bot`);
yield (0, counter_1.default)(newMessage);
return true;
});
exports.execute = execute;

View file

@ -1,46 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Models
const database_1 = __importDefault(require("../../../handlers/database"));
const logger_1 = __importDefault(require("../../../middlewares/logger"));
exports.default = (message) => __awaiter(void 0, void 0, void 0, function* () {
const { guild, channel, author, content } = message;
if (!guild)
throw new Error("Guild not found");
if (!channel)
throw new Error("Channel not found");
const channelCounter = yield database_1.default.guildCounter.findUnique({
where: {
guildId_channelId: {
guildId: guild.id,
channelId: channel.id,
},
},
});
if (!channelCounter)
return logger_1.default.debug("No counters found in channel.");
if (content === channelCounter.triggerWord)
return logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`User: ${author === null || author === void 0 ? void 0 : author.tag} (${author === null || author === void 0 ? void 0 : author.id}) in guild: ${guild === null || guild === void 0 ? void 0 : guild.name} (${guild === null || guild === void 0 ? void 0 : guild.id}) said the counter word: ${channelCounter.triggerWord}`);
yield message
.delete()
.then(() => __awaiter(void 0, void 0, void 0, function* () {
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`${author} said ${channelCounter.triggerWord} in ${channel}`);
yield (channel === null || channel === void 0 ? void 0 : channel.send(`${author} said **${channelCounter.triggerWord}**.`));
}))
.catch((error) => {
return logger_1.default.error(error);
});
return true;
});

View file

@ -1,16 +0,0 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.options = {
type: "on",
};
// Function to execute the event
const execute = (client) => {
var _a;
logger_1.default.warn(`Discord's API client (${(_a = client === null || client === void 0 ? void 0 : client.user) === null || _a === void 0 ? void 0 : _a.tag}) is rate-limited!`);
};
exports.execute = execute;

View file

@ -1,29 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.options = void 0;
// Helpers
const deployCommands_1 = __importDefault(require("../../handlers/deployCommands"));
const updatePresence_1 = __importDefault(require("../../handlers/updatePresence"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.options = {
type: "once",
};
// Execute the event
const execute = (client) => __awaiter(void 0, void 0, void 0, function* () {
logger_1.default.info("Discord's API client is ready!");
(0, updatePresence_1.default)(client);
yield (0, deployCommands_1.default)(client);
});
exports.execute = execute;

View file

@ -1,92 +0,0 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __asyncValues = (this && this.__asyncValues) || function (o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.register = void 0;
const checkDirectory_1 = __importDefault(require("../../helpers/checkDirectory"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
// Register the commands.
const register = (client) => __awaiter(void 0, void 0, void 0, function* () {
var _a, e_1, _b, _c;
logger_1.default.info("🔧 Started command management");
const commandNames = yield (0, checkDirectory_1.default)("commands");
if (!commandNames)
return logger_1.default.warn("No available commands found");
const totalCommands = commandNames.length;
let loadedCommands = 0;
logger_1.default.info(`🔧 Loading ${totalCommands} commands`);
// Import an command.
const importCommand = (name) => __awaiter(void 0, void 0, void 0, function* () {
var _e;
const command = yield (_e = `../../commands/${name}`, Promise.resolve().then(() => __importStar(require(_e))));
client.commands.set(command.builder.name, command);
return loadedCommands++;
});
try {
for (var _d = true, commandNames_1 = __asyncValues(commandNames), commandNames_1_1; commandNames_1_1 = yield commandNames_1.next(), _a = commandNames_1_1.done, !_a;) {
_c = commandNames_1_1.value;
_d = false;
try {
const commandName = _c;
yield importCommand(commandName).then(() => {
return logger_1.default.verbose(`🔧 Loaded command "${commandName}"`);
});
if (loadedCommands === totalCommands) {
return logger_1.default.info("🔧 All commands loaded");
}
}
finally {
_d = true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (!_d && !_a && (_b = commandNames_1.return)) yield _b.call(commandNames_1);
}
finally { if (e_1) throw e_1.error; }
}
return true;
});
exports.register = register;

View file

@ -1,25 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const client_1 = require("@prisma/client");
const logger_1 = __importDefault(require("../../middlewares/logger"));
const prisma = new client_1.PrismaClient();
prisma.$use((params, next) => __awaiter(void 0, void 0, void 0, function* () {
const before = Date.now();
const result = yield next(params);
const after = Date.now();
logger_1.default.debug(`Query ${params.model}.${params.action} took ${after - before}ms`);
return result;
}));
exports.default = prisma;

View file

@ -1,37 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const discord_js_1 = require("discord.js");
const getEmbedData_1 = __importDefault(require("../../helpers/getEmbedData"));
exports.default = (interaction, ephemeral) => __awaiter(void 0, void 0, void 0, function* () {
if (!interaction.isRepliable())
throw new Error(`Cannot reply to an interaction that is not repliable`);
yield interaction.deferReply({
ephemeral,
});
const embedConfig = yield (0, getEmbedData_1.default)(interaction.guild);
yield interaction.editReply({
embeds: [
new discord_js_1.EmbedBuilder()
.setFooter({
text: embedConfig.footerText,
iconURL: embedConfig.footerIcon,
})
.setTimestamp(new Date())
.setTitle("⏳︱Your request are being processed")
.setColor(embedConfig.waitColor)
.setDescription("This might take a while, please wait..."),
],
});
});

View file

@ -1,44 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = (client) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Destructure the client.
const { application } = client;
if (!application)
throw new Error("No application found");
// 2. Log that we are starting the command management.
logger_1.default.info("🔧 Started command deployment");
// 3. Get the commands.
const commands = [];
client.commands.forEach((command) => {
commands.push(command.builder.toJSON());
logger_1.default.verbose(`🔧 Loaded command "${command.builder.name}"`);
});
// 4. Set the commands.
yield application.commands.set(commands).then(() => {
logger_1.default.info("🔧 Deployed commands globally");
});
// 5. Tell the user that development mode is enabled.
if (process.env.NODE_ENV === "development") {
logger_1.default.info("🔧 Development mode enabled");
yield application.commands
.set(commands, process.env.DISCORD_GUILD_ID)
.then(() => {
logger_1.default.info(`🔧 Deployed commands to guild`);
});
}
// 6. Log that we are done with the command management.
logger_1.default.info("🔧 Finished command deployment");
});

View file

@ -1,105 +0,0 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __asyncValues = (this && this.__asyncValues) || function (o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.register = void 0;
const checkDirectory_1 = __importDefault(require("../../helpers/checkDirectory"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
// Registers all available events.
const register = (client) => __awaiter(void 0, void 0, void 0, function* () {
var _a, e_1, _b, _c;
logger_1.default.info("📡 Started event management");
const eventNames = yield (0, checkDirectory_1.default)("events");
if (!eventNames)
return logger_1.default.warn("No available events found");
const totalEvents = eventNames.length;
let loadedEvents = 0;
logger_1.default.info(`📡 Loading ${totalEvents} events`);
// Import an event.
const importEvent = (name) => __awaiter(void 0, void 0, void 0, function* () {
var _e;
const event = yield (_e = `../../events/${name}`, Promise.resolve().then(() => __importStar(require(_e))));
// Create a new event execute function.
const eventExecutor = (...args) => __awaiter(void 0, void 0, void 0, function* () {
yield event.execute(...args);
});
switch (event.options.type) {
case "once":
client.once(name, eventExecutor);
break;
case "on":
client.on(name, eventExecutor);
break;
default:
throw new Error(`📡 Invalid event type for event: ${name}`);
}
return loadedEvents++;
});
try {
for (var _d = true, eventNames_1 = __asyncValues(eventNames), eventNames_1_1; eventNames_1_1 = yield eventNames_1.next(), _a = eventNames_1_1.done, !_a;) {
_c = eventNames_1_1.value;
_d = false;
try {
const eventName = _c;
yield importEvent(eventName).then(() => {
return logger_1.default.verbose(`📡 Loaded event "${eventName}"`);
});
if (loadedEvents === totalEvents) {
return logger_1.default.info("📡 All events loaded");
}
}
finally {
_d = true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (!_d && !_a && (_b = eventNames_1.return)) yield _b.call(eventNames_1);
}
finally { if (e_1) throw e_1.error; }
}
return true;
});
exports.register = register;

View file

@ -1,57 +0,0 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.start = void 0;
const node_schedule_1 = __importDefault(require("node-schedule"));
const checkDirectory_1 = __importDefault(require("../../helpers/checkDirectory"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
// Start all jobs that are in the schedules directory
const start = (client) => __awaiter(void 0, void 0, void 0, function* () {
logger_1.default.info("⏰ Started job management");
const jobNames = yield (0, checkDirectory_1.default)("schedules");
if (!jobNames)
return logger_1.default.warn("⏰ No available jobs found");
return yield Promise.all(jobNames.map((jobName) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
const job = yield (_a = `../../schedules/${jobName}`, Promise.resolve().then(() => __importStar(require(_a))));
return node_schedule_1.default.scheduleJob(job.options.schedule, () => __awaiter(void 0, void 0, void 0, function* () {
logger_1.default.verbose(`⏰ Performed the job "${jobName}"`);
yield job.execute(client);
}));
})));
});
exports.start = start;

View file

@ -1,29 +0,0 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Dependencies
const discord_js_1 = require("discord.js");
const logger_1 = __importDefault(require("../../middlewares/logger"));
// Function
exports.default = (client) => {
// 1. Destructure the client.
const { guilds, user } = client;
if (!user)
throw new Error("No user found");
// 2. Get the total number of guilds and members.
const memberCount = guilds.cache.reduce((a, g) => a + g.memberCount, 0);
const guildCount = guilds.cache.size;
// 3. Set the presence.
user.setPresence({
activities: [
{
name: `${guildCount} guilds | ${memberCount} members`,
type: discord_js_1.ActivityType.Watching,
},
],
});
// 4. Log the presence.
return logger_1.default.info(`👀 Presence set to "${guildCount} guilds | ${memberCount} members"`);
};

View file

@ -1,47 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.error = exports.wait = exports.success = void 0;
const discord_js_1 = require("discord.js");
const getEmbedData_1 = __importDefault(require("../getEmbedData"));
// Construct a base embed for success messages
const success = (guild, title) => __awaiter(void 0, void 0, void 0, function* () {
const { successColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(guild);
return new discord_js_1.EmbedBuilder()
.setTimestamp(new Date())
.setTitle(title)
.setColor(successColor)
.setFooter({ text: footerText, iconURL: footerIcon });
});
exports.success = success;
// Construct a base embed for wait messages
const wait = (guild, title) => __awaiter(void 0, void 0, void 0, function* () {
const { waitColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(guild);
return new discord_js_1.EmbedBuilder()
.setTimestamp(new Date())
.setTitle(title)
.setColor(waitColor)
.setFooter({ text: footerText, iconURL: footerIcon });
});
exports.wait = wait;
// Construct a base embed for error messages
const error = (guild, title) => __awaiter(void 0, void 0, void 0, function* () {
const { errorColor, footerText, footerIcon } = yield (0, getEmbedData_1.default)(guild);
return new discord_js_1.EmbedBuilder()
.setTimestamp(new Date())
.setTitle(title)
.setColor(errorColor)
.setFooter({ text: footerText, iconURL: footerIcon });
});
exports.error = error;

View file

@ -1,5 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (text) => {
return text.charAt(0).toUpperCase() + text.slice(1);
};

View file

@ -1,20 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const fsPromises = fs_1.default.promises;
exports.default = (path) => __awaiter(void 0, void 0, void 0, function* () {
const result = yield fsPromises.readdir(`${__dirname}/../../${path}`);
return result;
});

View file

@ -1,8 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (interaction, permission) => {
if (!interaction.memberPermissions)
throw new Error("Could not check user for permissions");
if (!interaction.memberPermissions.has(permission))
throw new Error("Permission denied");
};

View file

@ -1,64 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_1 = __importDefault(require("../../handlers/database"));
const transactionRules_1 = __importDefault(require("./transactionRules"));
exports.default = (guild, user, amount) => __awaiter(void 0, void 0, void 0, function* () {
return yield database_1.default.$transaction((tx) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Check if the transaction is valid.
(0, transactionRules_1.default)(guild, user, amount);
// 2. Make the transaction.
const recipient = yield tx.guildMember.upsert({
update: {
creditsEarned: {
increment: amount,
},
},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
creditsEarned: amount,
},
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
});
// 3. Verify that the recipient actually is created.
if (!recipient)
throw new Error("No recipient available");
// 4. Return the recipient.
return recipient;
}));
});

View file

@ -1,62 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_1 = __importDefault(require("../../handlers/database"));
const transactionRules_1 = __importDefault(require("./transactionRules"));
exports.default = (guild, user, amount) => __awaiter(void 0, void 0, void 0, function* () {
return yield database_1.default.$transaction((tx) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Check if the transaction is valid.
(0, transactionRules_1.default)(guild, user, amount);
// 2. Make the transaction.
const recipient = yield tx.guildMember.upsert({
update: {
creditsEarned: amount,
},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
creditsEarned: amount,
},
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
});
// 3. Verify that the recipient actually is created.
if (!recipient)
throw new Error("No recipient available");
// 4. Return the recipient.
return recipient;
}));
});

View file

@ -1,64 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_1 = __importDefault(require("../../handlers/database"));
const transactionRules_1 = __importDefault(require("./transactionRules"));
exports.default = (guild, user, amount) => __awaiter(void 0, void 0, void 0, function* () {
return yield database_1.default.$transaction((tx) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Check if the transaction is valid.
(0, transactionRules_1.default)(guild, user, amount);
// 2. Make the transaction.
const recipient = yield tx.guildMember.upsert({
update: {
creditsEarned: {
decrement: amount,
},
},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
creditsEarned: -amount,
},
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
});
// 3. Verify that the recipient credits are not below zero.
if (recipient.creditsEarned < -100)
throw new Error("User do not have enough credits");
// 4. Return the recipient.
return recipient;
}));
});

View file

@ -1,16 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = (guild, user, amount) => {
// 1. Verify that the amount is not above 100.000.000 credits.
if (amount > 100000000) {
throw new Error("You can't give more than 1.000.000 credits.");
}
// 2. Verify that the amount is not below 1 credits.
if (amount <= 0) {
throw new Error("You can't give below one credit.");
}
// 3. Verify that the user is not an bot.
if (user.bot) {
throw new Error("You can't give to an bot.");
}
};

View file

@ -1,105 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_1 = __importDefault(require("../../handlers/database"));
const transactionRules_1 = __importDefault(require("./transactionRules"));
exports.default = (guild, from, to, amount) => __awaiter(void 0, void 0, void 0, function* () {
return yield database_1.default.$transaction((tx) => __awaiter(void 0, void 0, void 0, function* () {
// 1. Decrement amount from the sender.
const sender = yield tx.guildMember.upsert({
update: {
creditsEarned: {
decrement: amount,
},
},
create: {
user: {
connectOrCreate: {
create: {
id: from.id,
},
where: {
id: from.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
creditsEarned: -amount,
},
where: {
userId_guildId: {
userId: from.id,
guildId: guild.id,
},
},
});
// 4. Verify that the sender's balance didn't go below zero.
if (sender.creditsEarned < 0) {
throw new Error(`${from} doesn't have enough to send ${amount}`);
}
// 5. Check if the transactions is valid.
(0, transactionRules_1.default)(guild, from, amount);
(0, transactionRules_1.default)(guild, to, amount);
// 6. Verify that sender and recipient are not the same user.
if (from.id === to.id)
throw new Error("You can't transfer to yourself.");
// 7. Increment the recipient's balance by amount.
const recipient = yield tx.guildMember.upsert({
update: {
creditsEarned: {
increment: amount,
},
},
create: {
user: {
connectOrCreate: {
create: {
id: to.id,
},
where: {
id: to.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
creditsEarned: amount,
},
where: {
userId_guildId: {
userId: to.id,
guildId: guild.id,
},
},
});
return recipient;
}));
});

View file

@ -1,29 +0,0 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = __importDefault(require("crypto"));
const iv = crypto_1.default.randomBytes(16);
// Encrypts a string
const encrypt = (text) => {
const cipher = crypto_1.default.createCipheriv(process.env.ENCRYPTION_ALGORITHM, process.env.ENCRYPTION_SECRET, iv);
const encrypted = Buffer.concat([cipher.update(text), cipher.final()]);
return {
iv: iv.toString("hex"),
content: encrypted.toString("hex"),
};
};
// Decrypts a string
const decrypt = (hash) => {
const decipher = crypto_1.default.createDecipheriv(process.env.ENCRYPTION_ALGORITHM, process.env.ENCRYPTION_SECRET, Buffer.from(hash.iv, "hex"));
const decrypted = Buffer.concat([
decipher.update(Buffer.from(hash.content, "hex")),
decipher.final(),
]);
return decrypted.toString();
};
exports.default = {
encrypt,
decrypt,
};

View file

@ -1,75 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_1 = __importDefault(require("../../handlers/database"));
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = (guild) => __awaiter(void 0, void 0, void 0, function* () {
const { EMBED_COLOR_SUCCESS, EMBED_COLOR_WAIT, EMBED_COLOR_ERROR, EMBED_FOOTER_TEXT, EMBED_FOOTER_ICON, } = process.env;
const defaultEmbedConfig = {
successColor: EMBED_COLOR_SUCCESS,
waitColor: EMBED_COLOR_WAIT,
errorColor: EMBED_COLOR_ERROR,
footerText: EMBED_FOOTER_TEXT,
footerIcon: EMBED_FOOTER_ICON,
};
if (!guild) {
return defaultEmbedConfig;
}
const createGuildMember = yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: guild === null || guild === void 0 ? void 0 : guild.ownerId,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: guild.ownerId,
},
where: {
id: guild.ownerId,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
include: {
user: true,
guild: true,
},
});
logger_1.default.silly(createGuildMember);
if (!createGuildMember) {
return defaultEmbedConfig;
}
return {
successColor: createGuildMember.guild.embedColorSuccess,
waitColor: createGuildMember.guild.embedColorWait,
errorColor: createGuildMember.guild.embedColorError,
footerText: createGuildMember.guild.embedFooterText,
footerIcon: createGuildMember.guild.embedFooterIcon,
};
});

View file

@ -1,11 +0,0 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const logger_1 = __importDefault(require("../../middlewares/logger"));
exports.default = (count, noun, suffix) => {
const result = `${count} ${noun}${count !== 1 ? suffix || "s" : ""}`;
logger_1.default === null || logger_1.default === void 0 ? void 0 : logger_1.default.silly(`Pluralized ${count} to ${result}`);
return result;
};

View file

@ -1,49 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const database_1 = __importDefault(require("../../handlers/database"));
exports.default = (guildMember) => __awaiter(void 0, void 0, void 0, function* () {
const { guild, user } = guildMember;
return yield database_1.default.guildMember.upsert({
where: {
userId_guildId: {
userId: user.id,
guildId: guild.id,
},
},
update: {},
create: {
user: {
connectOrCreate: {
create: {
id: user.id,
},
where: {
id: user.id,
},
},
},
guild: {
connectOrCreate: {
create: {
id: guild.id,
},
where: {
id: guild.id,
},
},
},
},
});
});

Some files were not shown because too many files have changed in this diff Show more