From b1cebba225f431d9b5a7a38524f8efa2fcdb5b66 Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Mon, 4 Jul 2022 15:41:31 +0000 Subject: [PATCH 1/9] feat: :sparkles: added docker support --- Dockerfile | 30 ++++++++++++++++++++++++++++++ docker-compose.yml | 33 +++++++++++++++++++++++++++++++++ package.json | 3 +++ src/config_docker/database.ts | 7 +++++++ src/config_docker/discord.ts | 14 ++++++++++++++ src/config_docker/embed.ts | 19 +++++++++++++++++++ src/config_docker/encryption.ts | 6 ++++++ src/config_docker/other.ts | 25 +++++++++++++++++++++++++ src/config_docker/reputation.ts | 2 ++ src/types/enviroment.d.ts | 27 +++++++++++++++++++++++++++ 10 files changed, 166 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 src/config_docker/database.ts create mode 100644 src/config_docker/discord.ts create mode 100644 src/config_docker/embed.ts create mode 100644 src/config_docker/encryption.ts create mode 100644 src/config_docker/other.ts create mode 100644 src/config_docker/reputation.ts create mode 100644 src/types/enviroment.d.ts diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bf1e149 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +FROM node:16 + +LABEL maintainer="me@jqshuv.xyz" +LABEL org.opencontainers.image.source https://github.com/ZynerOrg/xyter +LABEL org.opencontainers.image.description "An multi-purpose discord.js bot." +LABEL org.opencontainers.image.licenses=GPL-3.0-only + + +WORKDIR /app + +LABEL maintainer="me@jqshuv.xyz" +LABEL org.opencontainers.image.source https://github.com/ZynerOrg/xyter +LABEL org.opencontainers.image.description "An multi-purpose discord.js bot." +LABEL org.opencontainers.image.licenses=GPL-3.0-only + +COPY package* . +RUN npm install + +COPY . . +RUN mv src/config_docker src/config + +RUN npx tsc + +RUN npx tsc -v > /app/tsc.log +RUN npm -v > /app/npm.log +RUN node -v > /app/node.log + +WORKDIR /app/build + +CMD [ "npx", "nodemon" ] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..007f637 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +services: + app: + depends_on: + - mongodb + build: . + restart: unless-stopped + environment: + # You can leave this as-is. + - DB_HOST=mongodb + - DB_USER=mongouser + - DB_PASSWORD=mongopasword + - DB_NAME=xyter + - DB_PORT=27017 + # You have to set these values! + - DISCORD_TOKEN=YOUR_DISCORD_TOKEN + - DISCORD_CLIENT_ID=YOUR_CLIENT_ID + - DISCORD_DEV_GUILD_ID=YOUR_DEV_GUILD_ID + - HOSTER_NAME=YOUR_HOSTER_NAME + - NODE_ENV=development + stdin_open: true + tty: true + mongodb: + image: mongo:latest + restart: unless-stopped + environment: + - MONGO_INITDB_ROOT_USERNAME=mongouser + - MONGO_INITDB_ROOT_PASSWORD=mongopasword + ports: + - $MONGODB_LOCAL_PORT:27017 + volumes: + - db:/data/db +volumes: + db: diff --git a/package.json b/package.json index ac149cc..02a2bd2 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,9 @@ "url": "https://github.com/ZynerOrg/xyter.git" }, "author": "Vermium Sifell (https://zyner.org)", + "contributors": [ + "Joshua Schmitt (https://jqshuv.xyz)" + ], "license": "GPL-3.0-only", "bugs": { "url": "https://github.com/ZynerOrg/xyter/issues", diff --git a/src/config_docker/database.ts b/src/config_docker/database.ts new file mode 100644 index 0000000..0d51b49 --- /dev/null +++ b/src/config_docker/database.ts @@ -0,0 +1,7 @@ +// MongoDB connection string + +const { DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME } = process.env; + +const mongoUrl = `mongodb://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?authSource=admin`; + +export const url = mongoUrl; diff --git a/src/config_docker/discord.ts b/src/config_docker/discord.ts new file mode 100644 index 0000000..f3f9c4a --- /dev/null +++ b/src/config_docker/discord.ts @@ -0,0 +1,14 @@ +import { Intents } from "discord.js"; // discord.js + +// Discord API token +export const token = process.env["DISCORD_TOKEN"]; + +// Discord API id +export const clientId = process.env["DISCORD_CLIENT_ID"]; + +// Discord API intents +export const intents = [ + Intents.FLAGS.GUILDS, + Intents.FLAGS.GUILD_MESSAGES, + Intents.FLAGS.GUILD_MEMBERS, +]; diff --git a/src/config_docker/embed.ts b/src/config_docker/embed.ts new file mode 100644 index 0000000..81430e5 --- /dev/null +++ b/src/config_docker/embed.ts @@ -0,0 +1,19 @@ +// Dependencies +import { ColorResolvable } from "discord.js"; + +// Color for successfully actions +export const successColor: ColorResolvable = "#22bb33"; + +// Color for waiting actions +export const waitColor: ColorResolvable = "#f0ad4e"; + +// Color for error actions +export const errorColor: ColorResolvable = "#bb2124"; + +// Footer text +export const footerText = + process.env["EMBED_FOOTER_TEXT"] || "https://github.com/ZynerOrg/xyter"; + +// Footer icon +export const footerIcon = + process.env["EMBED_FOOTER_ICON"] || "https://github.com/ZynerOrg.png"; diff --git a/src/config_docker/encryption.ts b/src/config_docker/encryption.ts new file mode 100644 index 0000000..d54eb43 --- /dev/null +++ b/src/config_docker/encryption.ts @@ -0,0 +1,6 @@ +// Encryption algorithm +export const algorithm = "aes-256-ctr"; + +// Encryption secret (strictly 32 length) +export const secretKey = + process.env["SECRET_KEY"] || "h/f#Ts8w5sch5L:J*_gPW)]$'!4K.K.-"; diff --git a/src/config_docker/other.ts b/src/config_docker/other.ts new file mode 100644 index 0000000..96cc6c3 --- /dev/null +++ b/src/config_docker/other.ts @@ -0,0 +1,25 @@ +// Development features + +let isDevMode: boolean; + +if (process.env["NODE_ENV"] == "production") { + isDevMode = false; +} else { + isDevMode = true; +} + +export const devMode = isDevMode; + +// Development guild +export const guildId = process.env["DISCORD_DEV_GUILD_ID"]; + +// Hoster name +export const hosterName = process.env["HOSTER_NAME"]; + +// Hoster Url +export const hosterUrl = + process.env["HOSTER_URL"] || + "https://xyter.zyner.org/customization/change-hoster"; + +// Winston log level +export const logLevel = "info"; diff --git a/src/config_docker/reputation.ts b/src/config_docker/reputation.ts new file mode 100644 index 0000000..064edc9 --- /dev/null +++ b/src/config_docker/reputation.ts @@ -0,0 +1,2 @@ +// Timeout between repute someone (seconds) +export const timeout = 86400; // One day diff --git a/src/types/enviroment.d.ts b/src/types/enviroment.d.ts new file mode 100644 index 0000000..5a55579 --- /dev/null +++ b/src/types/enviroment.d.ts @@ -0,0 +1,27 @@ +// Copyright (c) 2022 Joshua Schmitt +// +// This software is released under the MIT License. +// https://opensource.org/licenses/MIT + +declare global { + namespace NodeJS { + interface ProcessEnv { + DB_HOST: string; + DB_PORT: string; + DB_USER: string; + DB_PASSWORD: string; + DISCORD_TOKEN: string; + DISCORD_CLIENT_ID: string; + DISCORD_DEV_GUILD_ID: string; + EMBED_FOOTER_TEXT: string; + EMBED_FOOTER_ICON: string; + SECRET_KEY: string; + DISCORD_DEV_GUILD_ID: string; + HOSTER_NAME: string; + HOSTER_URL: string; + NODE_ENV: string; + } + } +} + +export {}; From 1a40d4ada83e903bc368e3fb6cccdceede34b5e6 Mon Sep 17 00:00:00 2001 From: Vermium Sifell Date: Tue, 5 Jul 2022 15:17:02 +0200 Subject: [PATCH 2/9] =?UTF-8?q?=F0=9F=92=A5=20migrate=20from=20*.ts=20to?= =?UTF-8?q?=20.env=20configs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +++ package.json | 1 + src/config_example/database.ts | 3 --- src/config_example/discord.ts | 14 ---------- src/config_example/embed.ts | 17 ------------ src/config_example/encryption.ts | 5 ---- src/config_example/other.ts | 14 ---------- src/config_example/reputation.ts | 2 -- src/handlers/deployCommands/index.ts | 22 +++++++++------- src/handlers/devMode/index.ts | 15 +++++------ src/handlers/encryption/index.ts | 13 +++++----- src/helpers/embedBuilder/index.ts | 5 ++-- src/helpers/getEmbedConfig/index.ts | 22 ++++++++++++---- src/index.ts | 6 ++--- src/logger/index.ts | 4 +-- src/managers/database/index.ts | 19 ++++++++++++-- src/managers/index.ts | 1 + .../commands/reputation/modules/give/index.ts | 3 +-- .../commands/utility/modules/about/index.ts | 5 ++-- src/types/common/environment.d.ts | 26 +++++++++++++++++++ 20 files changed, 98 insertions(+), 102 deletions(-) delete mode 100644 src/config_example/database.ts delete mode 100644 src/config_example/discord.ts delete mode 100644 src/config_example/embed.ts delete mode 100644 src/config_example/encryption.ts delete mode 100644 src/config_example/other.ts delete mode 100644 src/config_example/reputation.ts create mode 100644 src/types/common/environment.d.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 38d1af9..edd979a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -22,5 +22,8 @@ "addWords": true, "scope": "workspace" } + }, + "[dotenv]": { + "editor.defaultFormatter": "foxundermoon.shell-format" } } diff --git a/package.json b/package.json index 08b0c96..3ca6361 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "crypto": "^1.0.1", "discord-api-types": "^0.36.0", "discord.js": "^13.6.0", + "dotenv": "^16.0.1", "i18n": "^0.15.0", "i18next": "^21.6.13", "i18next-async-backend": "^2.0.0", diff --git a/src/config_example/database.ts b/src/config_example/database.ts deleted file mode 100644 index 35e2e27..0000000 --- a/src/config_example/database.ts +++ /dev/null @@ -1,3 +0,0 @@ -// MongoDB connection string -export const url = - "mongodb+srv://username:password@server/database?retryWrites=true&w=majority"; diff --git a/src/config_example/discord.ts b/src/config_example/discord.ts deleted file mode 100644 index 7b22c28..0000000 --- a/src/config_example/discord.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Intents } from "discord.js"; // discord.js - -// Discord API token -export const token = ""; - -// Discord API id -export const clientId = ""; - -// Discord API intents -export const intents = [ - Intents.FLAGS.GUILDS, - Intents.FLAGS.GUILD_MESSAGES, - Intents.FLAGS.GUILD_MEMBERS, -]; diff --git a/src/config_example/embed.ts b/src/config_example/embed.ts deleted file mode 100644 index d6eebb1..0000000 --- a/src/config_example/embed.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Dependencies -import { ColorResolvable } from "discord.js"; - -// Color for successfully actions -export const successColor: ColorResolvable = "#22bb33"; - -// Color for waiting actions -export const waitColor: ColorResolvable = "#f0ad4e"; - -// Color for error actions -export const errorColor: ColorResolvable = "#bb2124"; - -// Footer text -export const footerText = "https://github.com/ZynerOrg/xyter"; - -// Footer icon -export const footerIcon = "https://github.com/ZynerOrg.png"; diff --git a/src/config_example/encryption.ts b/src/config_example/encryption.ts deleted file mode 100644 index 9d547f1..0000000 --- a/src/config_example/encryption.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Encryption algorithm -export const algorithm = "aes-256-ctr"; - -// Encryption secret (strictly 32 length) -export const secretKey = ""; diff --git a/src/config_example/other.ts b/src/config_example/other.ts deleted file mode 100644 index eefd62c..0000000 --- a/src/config_example/other.ts +++ /dev/null @@ -1,14 +0,0 @@ -// Development features -export const devMode = false; - -// Development guild -export const guildId = ""; - -// Hoster name -export const hosterName = "someone"; - -// Hoster Url -export const hosterUrl = "https://xyter.zyner.org/customization/change-hoster"; - -// Winston log level -export const logLevel = "info"; diff --git a/src/config_example/reputation.ts b/src/config_example/reputation.ts deleted file mode 100644 index 064edc9..0000000 --- a/src/config_example/reputation.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Timeout between repute someone (seconds) -export const timeout = 86400; // One day diff --git a/src/handlers/deployCommands/index.ts b/src/handlers/deployCommands/index.ts index 492e1ab..9491db5 100644 --- a/src/handlers/deployCommands/index.ts +++ b/src/handlers/deployCommands/index.ts @@ -1,12 +1,8 @@ -import { token, clientId } from "../../config/discord"; -import { devMode, guildId } from "../../config/other"; - import logger from "../../logger"; import { Client } from "discord.js"; import { REST } from "@discordjs/rest"; import { Routes } from "discord-api-types/v9"; import { RESTPostAPIApplicationCommandsJSONBody } from "discord-api-types/v10"; - import { ICommand } from "../../interfaces/Command"; export default async (client: Client) => { @@ -32,10 +28,10 @@ export default async (client: Client) => { throw new Error(`Could not gather command list: ${error}`); }); - const rest = new REST({ version: "9" }).setToken(token); + const rest = new REST({ version: "9" }).setToken(process.env.DISCORD_TOKEN); await rest - .put(Routes.applicationCommands(clientId), { + .put(Routes.applicationCommands(process.env.DISCORD_CLIENT_ID), { body: commandList, }) .then(async () => { @@ -45,11 +41,17 @@ export default async (client: Client) => { logger.error(`${error}`); }); - if (devMode) { + if (process.env.NODE_ENV !== "production") { await rest - .put(Routes.applicationGuildCommands(clientId, guildId), { - body: commandList, - }) + .put( + Routes.applicationGuildCommands( + process.env.DISCORD_CLIENT_ID, + process.env.DISCORD_GUILD_ID + ), + { + body: commandList, + } + ) .then(async () => logger.info(`Finished updating guild command list.`)) .catch(async (error) => { logger.error(`${error}`); diff --git a/src/handlers/devMode/index.ts b/src/handlers/devMode/index.ts index c7900a0..ba36b50 100644 --- a/src/handlers/devMode/index.ts +++ b/src/handlers/devMode/index.ts @@ -1,16 +1,13 @@ -// Dependencies import { Client } from "discord.js"; - import logger from "../../logger"; -// Configuration -import { devMode, guildId } from "../../config/other"; - export default async (client: Client) => { - if (!devMode) { - return client?.application?.commands?.set([], guildId).then(async () => { - return logger.verbose(`Development mode is disabled.`); - }); + if (process.env.NODE_ENV !== "production") { + return client?.application?.commands + ?.set([], process.env.DISCORD_GUILD_ID) + .then(async () => { + return logger.verbose(`Development mode is disabled.`); + }); } return logger.info(`Development mode is enabled.`); diff --git a/src/handlers/encryption/index.ts b/src/handlers/encryption/index.ts index 8b6512c..0e1c027 100644 --- a/src/handlers/encryption/index.ts +++ b/src/handlers/encryption/index.ts @@ -1,13 +1,14 @@ import crypto from "crypto"; - -import { secretKey, algorithm } from "../../config/encryption"; - import { IEncryptionData } from "../../interfaces/EncryptionData"; const iv = crypto.randomBytes(16); const encrypt = (text: crypto.BinaryLike): IEncryptionData => { - const cipher = crypto.createCipheriv(algorithm, secretKey, iv); + const cipher = crypto.createCipheriv( + process.env.ENCRYPTION_ALGORITHM, + process.env.ENCRYPTION_SECRET, + iv + ); const encrypted = Buffer.concat([cipher.update(text), cipher.final()]); return { @@ -18,8 +19,8 @@ const encrypt = (text: crypto.BinaryLike): IEncryptionData => { const decrypt = (hash: IEncryptionData) => { const decipher = crypto.createDecipheriv( - algorithm, - secretKey, + process.env.ENCRYPTION_ALGORITHM, + process.env.ENCRYPTION_SECRET, Buffer.from(hash.iv, "hex") ); diff --git a/src/helpers/embedBuilder/index.ts b/src/helpers/embedBuilder/index.ts index d93cc5c..6d6a51d 100644 --- a/src/helpers/embedBuilder/index.ts +++ b/src/helpers/embedBuilder/index.ts @@ -1,9 +1,8 @@ -import { footerText, footerIcon } from "../../config/embed"; import { MessageEmbed } from "discord.js"; export default new MessageEmbed() .setFooter({ - text: footerText, - iconURL: footerIcon, + text: process.env.EMBED_FOOTER_TEXT, + iconURL: process.env.EMBED_FOOTER_ICON, }) .setTimestamp(new Date()); diff --git a/src/helpers/getEmbedConfig/index.ts b/src/helpers/getEmbedConfig/index.ts index ccd3fdb..0d88716 100644 --- a/src/helpers/getEmbedConfig/index.ts +++ b/src/helpers/getEmbedConfig/index.ts @@ -1,18 +1,30 @@ import guildSchema from "../../models/guild"; -import * as embedConfig from "../../config/embed"; import { Guild } from "discord.js"; export default async (guild?: Guild | null) => { + 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 { ...embedConfig }; + return defaultEmbedConfig; } const guildConfig = await guildSchema.findOne({ guildId: guild.id }); if (!guildConfig) { - return { - ...embedConfig, - }; + return defaultEmbedConfig; } return guildConfig.embeds; }; diff --git a/src/index.ts b/src/index.ts index c3661d7..a33abb5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,3 @@ -import { token, intents } from "./config/discord"; - import { Client, Collection } from "discord.js"; // discord.js import * as managers from "./managers"; @@ -8,7 +6,7 @@ import * as managers from "./managers"; const main = async () => { // Initiate client object const client = new Client({ - intents, + intents: ["GUILDS", "GUILD_MEMBERS", "GUILD_MESSAGES"], }); // Create command collection @@ -17,7 +15,7 @@ const main = async () => { await managers.start(client); // Authorize with Discord's API - await client.login(token); + await client.login(process.env.DISCORD_TOKEN); }; main(); diff --git a/src/logger/index.ts b/src/logger/index.ts index 0593ec9..a91f01d 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -1,13 +1,11 @@ import winston from "winston"; import "winston-daily-rotate-file"; -import { logLevel } from "../config/other"; - const { combine, timestamp, printf, errors, colorize, align, json } = winston.format; export default winston.createLogger({ - level: logLevel || "info", + level: process.env.LOG_LEVEL || "info", transports: [ new winston.transports.DailyRotateFile({ filename: "logs/combined-%DATE%.log", diff --git a/src/managers/database/index.ts b/src/managers/database/index.ts index c58af68..4b65e4f 100644 --- a/src/managers/database/index.ts +++ b/src/managers/database/index.ts @@ -1,6 +1,21 @@ import mongoose from "mongoose"; -import { url } from "../../config/database"; +import logger from "../../logger"; export const connect = async () => { - await mongoose.connect(url); + await mongoose + .connect(process.env.MONGO_URL) + .then(async (connection) => { + logger.info(`💾 Connected to database: ${connection.connection.name}`); + }) + .catch(async (e) => { + logger.error("💾 Could not connect to database", e); + }); + + mongoose.connection.on("error", async (error) => { + logger.error(`💾 ${error}`); + }); + + mongoose.connection.on("warn", async (warning) => { + logger.warn(`💾 ${warning}`); + }); }; diff --git a/src/managers/index.ts b/src/managers/index.ts index a1f3dad..4e74859 100644 --- a/src/managers/index.ts +++ b/src/managers/index.ts @@ -1,3 +1,4 @@ +import "dotenv/config"; import { Client } from "discord.js"; import * as database from "./database"; diff --git a/src/plugins/commands/reputation/modules/give/index.ts b/src/plugins/commands/reputation/modules/give/index.ts index f9970df..5416ee1 100644 --- a/src/plugins/commands/reputation/modules/give/index.ts +++ b/src/plugins/commands/reputation/modules/give/index.ts @@ -1,6 +1,5 @@ import { CommandInteraction } from "discord.js"; import getEmbedConfig from "../../../../../helpers/getEmbedConfig"; -import { timeout } from "../../../../../config/reputation"; import logger from "../../../../../logger"; import fetchUser from "../../../../../helpers/fetchUser"; import { SlashCommandSubcommandBuilder } from "@discordjs/builders"; @@ -53,7 +52,7 @@ export default { await noSelfReputation(optionTarget, user); // Check if user is on cooldown otherwise create one - await cooldown.command(interaction, timeout); + await cooldown.command(interaction, process.env.REPUTATION_TIMEOUT); switch (optionType) { case "positive": diff --git a/src/plugins/commands/utility/modules/about/index.ts b/src/plugins/commands/utility/modules/about/index.ts index 92af9cb..e3670b3 100644 --- a/src/plugins/commands/utility/modules/about/index.ts +++ b/src/plugins/commands/utility/modules/about/index.ts @@ -8,7 +8,6 @@ import { // Configurations import getEmbedConfig from "../../../../../helpers/getEmbedConfig"; -import { hosterName, hosterUrl } from "../../../../../config/other"; import { SlashCommandSubcommandBuilder } from "@discordjs/builders"; // Function @@ -45,10 +44,10 @@ export default { .setEmoji("💬") .setURL("https://discord.zyner.org"), new MessageButton() - .setLabel(`Hosted by ${hosterName}`) + .setLabel(`Hosted by ${process.env.BOT_HOSTER_NAME}`) .setStyle("LINK") .setEmoji("⚒️") - .setURL(`${hosterUrl}`) + .setURL(`${process.env.BOT_HOSTER_URL}`) ); const interactionEmbed = { diff --git a/src/types/common/environment.d.ts b/src/types/common/environment.d.ts new file mode 100644 index 0000000..4c1ee6c --- /dev/null +++ b/src/types/common/environment.d.ts @@ -0,0 +1,26 @@ +import { Snowflake, ColorResolvable } from "discord.js"; + +declare global { + namespace NodeJS { + interface ProcessEnv { + MONGO_URL: string; + DISCORD_TOKEN: string; + DISCORD_CLIENT_ID: Snowflake; + DISCORD_GUILD_ID: Snowflake; + DEVELOPMENT_MODE: boolean; + ENCRYPTION_ALGORITHM: string; + ENCRYPTION_SECRET: string; + EMBED_COLOR_SUCCESS: ColorResolvable; + EMBED_COLOR_WAIT: ColorResolvable; + EMBED_COLOR_ERROR: ColorResolvable; + EMBED_FOOTER_TEXT: string; + EMBED_FOOTER_ICON: string; + LOG_LEVEL: string; + REPUTATION_TIMEOUT: number; + BOT_HOSTER_NAME: string; + BOT_HOSTER_URL: string; + } + } +} + +export {}; From 9948c63d630adae34adda26a1117d4733753c5f1 Mon Sep 17 00:00:00 2001 From: Vermium Sifell Date: Tue, 5 Jul 2022 15:20:54 +0200 Subject: [PATCH 3/9] =?UTF-8?q?=F0=9F=94=A7=20example=20env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..51665d3 --- /dev/null +++ b/.env.example @@ -0,0 +1,30 @@ +# THIS FILE SHOULD BE INSIDE OF build/ + +# Discord +DISCORD_TOKEN="" +DISCORD_CLIENT_ID="" +DISCORD_GUILD_ID="" + +# Database +MONGO_URL="mongodb+srv://username:password@host/database?retryWrites=true&w=majority" + +# Encryption +ENCRYPTION_ALGORITHM="aes-256-ctr" +ENCRYPTION_SECRET="A RANDOM STRING WITH LENGTH OF 32" + +#Embed +EMEBD_COLOR_SUCCESS="#22bb33" +EMBED_COLOR_WAIT="#f0ad4e" +EMBED_COLOR_ERROR="#bb2124" +EMBED_FOOTER_TEXT="https://github.com/ZynerOrg/xyter" +EMBED_FOOTER_ICON="https://github.com/ZynerOrg.png" + +# Log +LOG_LEVEL="silly" + +# Reputation +REPUTATION_TIMEOUT="86400" + +# Bot Hoster +BOT_HOSTER_NAME="Zyner" +BOT_HOSTER_URL="https://xyter.zyner.org/customization/change-hoster" From fbcbf8545b3cde8f3634b4a98c0a46af10cecb1f Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Tue, 5 Jul 2022 16:07:02 +0000 Subject: [PATCH 4/9] fix: :rocket: fix and rewrote docker stuff I reworked the docker files and added docker support for the new config system. The old config system is no longer working --- .dockerignore | 6 +++++ .gitignore | 5 ++++ Dockerfile | 20 +++------------ docker-compose.dev.yml | 33 +++++++++++++++++++++++++ docker-compose.yml | 44 ++++++++++++++++----------------- src/config_docker/database.ts | 7 ------ src/config_docker/discord.ts | 14 ----------- src/config_docker/embed.ts | 19 -------------- src/config_docker/encryption.ts | 6 ----- src/config_docker/other.ts | 25 ------------------- src/config_docker/reputation.ts | 2 -- src/types/enviroment.d.ts | 27 -------------------- 12 files changed, 69 insertions(+), 139 deletions(-) create mode 100644 .dockerignore create mode 100644 docker-compose.dev.yml delete mode 100644 src/config_docker/database.ts delete mode 100644 src/config_docker/discord.ts delete mode 100644 src/config_docker/embed.ts delete mode 100644 src/config_docker/encryption.ts delete mode 100644 src/config_docker/other.ts delete mode 100644 src/config_docker/reputation.ts delete mode 100644 src/types/enviroment.d.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..efa748a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.vscode +.husky +.github +.cspell +.env +node_modules \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9fe2862..ff5dc1a 100644 --- a/.gitignore +++ b/.gitignore @@ -140,3 +140,8 @@ dist .yarn/build-state.yml .yarn/install-state.gz .pnp.* + + +# Docker +database +docker-compose.local.yml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index bf1e149..af5581d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,16 @@ FROM node:16 -LABEL maintainer="me@jqshuv.xyz" -LABEL org.opencontainers.image.source https://github.com/ZynerOrg/xyter -LABEL org.opencontainers.image.description "An multi-purpose discord.js bot." -LABEL org.opencontainers.image.licenses=GPL-3.0-only - +LABEL maintainer="xyter@zyner.org" WORKDIR /app -LABEL maintainer="me@jqshuv.xyz" -LABEL org.opencontainers.image.source https://github.com/ZynerOrg/xyter -LABEL org.opencontainers.image.description "An multi-purpose discord.js bot." -LABEL org.opencontainers.image.licenses=GPL-3.0-only - COPY package* . RUN npm install COPY . . -RUN mv src/config_docker src/config -RUN npx tsc - -RUN npx tsc -v > /app/tsc.log -RUN npm -v > /app/npm.log -RUN node -v > /app/node.log +RUN npx -y tsc WORKDIR /app/build -CMD [ "npx", "nodemon" ] \ No newline at end of file +CMD [ "node", "." ] \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..5765287 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,33 @@ +services: + app: + depends_on: + - mongodb + build: . + restart: unless-stopped + environment: + - DISCORD_TOKEN=YOUR TOKEN + - DISCORD_CLIENT_ID=YOUR CLIENT ID + - DISCORD_GUILD_ID=YOUR GUILD ID + ### LEAVE THIS AS IT IS! ### + - MONGO_URL=mongodb://mongodb:27017/xyter?retryWrites=true&w=majority + ############################ + - ENCRYPTION_ALGORITHM=aes-256-ctr + - ENCRYPTION_SECRET=A RANDOM STRING WITH LENGTH OF 32 + - EMEBD_COLOR_SUCCESS=#22bb33 + - EMBED_COLOR_WAIT=#f0ad4e + - EMBED_COLOR_ERROR=#bb2124 + - EMBED_FOOTER_TEXT=https://github.com/ZynerOrg/xyter + - EMBED_FOOTER_ICON=https://github.com/ZynerOrg.png + - LOG_LEVEL=silly + - REPUTATION_TIMEOUT=86400 + - BOT_HOSTER_NAME=Zyner + - BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster + - NODE_ENV=production + stdin_open: true + tty: true + mongodb: + image: mongo:4.2.21 + restart: unless-stopped + volumes: + - ./logs:/app/build/logs + - ./database:/data/db diff --git a/docker-compose.yml b/docker-compose.yml index 007f637..9b08008 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,32 +2,32 @@ services: app: depends_on: - mongodb - build: . + image: zyner/xyter:2022.07.0 restart: unless-stopped environment: - # You can leave this as-is. - - DB_HOST=mongodb - - DB_USER=mongouser - - DB_PASSWORD=mongopasword - - DB_NAME=xyter - - DB_PORT=27017 - # You have to set these values! - - DISCORD_TOKEN=YOUR_DISCORD_TOKEN - - DISCORD_CLIENT_ID=YOUR_CLIENT_ID - - DISCORD_DEV_GUILD_ID=YOUR_DEV_GUILD_ID - - HOSTER_NAME=YOUR_HOSTER_NAME - - NODE_ENV=development + - DISCORD_TOKEN=YOUR TOKEN + - DISCORD_CLIENT_ID=YOUR CLIENT ID + - DISCORD_GUILD_ID=YOUR GUILD ID + ### LEAVE THIS AS IT IS! ### + - MONGO_URL=mongodb://mongodb:27017/xyter?retryWrites=true&w=majority + ############################ + - ENCRYPTION_ALGORITHM=aes-256-ctr + - ENCRYPTION_SECRET=A RANDOM STRING WITH LENGTH OF 32 + - EMEBD_COLOR_SUCCESS=#22bb33 + - EMBED_COLOR_WAIT=#f0ad4e + - EMBED_COLOR_ERROR=#bb2124 + - EMBED_FOOTER_TEXT=https://github.com/ZynerOrg/xyter + - EMBED_FOOTER_ICON=https://github.com/ZynerOrg.png + - LOG_LEVEL=silly + - REPUTATION_TIMEOUT=86400 + - BOT_HOSTER_NAME=Zyner + - BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster + - NODE_ENV=production stdin_open: true tty: true mongodb: - image: mongo:latest + image: mongo:4.2.21 restart: unless-stopped - environment: - - MONGO_INITDB_ROOT_USERNAME=mongouser - - MONGO_INITDB_ROOT_PASSWORD=mongopasword - ports: - - $MONGODB_LOCAL_PORT:27017 volumes: - - db:/data/db -volumes: - db: + - ./logs:/app/build/logs + - ./database:/data/db diff --git a/src/config_docker/database.ts b/src/config_docker/database.ts deleted file mode 100644 index 0d51b49..0000000 --- a/src/config_docker/database.ts +++ /dev/null @@ -1,7 +0,0 @@ -// MongoDB connection string - -const { DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME } = process.env; - -const mongoUrl = `mongodb://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?authSource=admin`; - -export const url = mongoUrl; diff --git a/src/config_docker/discord.ts b/src/config_docker/discord.ts deleted file mode 100644 index f3f9c4a..0000000 --- a/src/config_docker/discord.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Intents } from "discord.js"; // discord.js - -// Discord API token -export const token = process.env["DISCORD_TOKEN"]; - -// Discord API id -export const clientId = process.env["DISCORD_CLIENT_ID"]; - -// Discord API intents -export const intents = [ - Intents.FLAGS.GUILDS, - Intents.FLAGS.GUILD_MESSAGES, - Intents.FLAGS.GUILD_MEMBERS, -]; diff --git a/src/config_docker/embed.ts b/src/config_docker/embed.ts deleted file mode 100644 index 81430e5..0000000 --- a/src/config_docker/embed.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Dependencies -import { ColorResolvable } from "discord.js"; - -// Color for successfully actions -export const successColor: ColorResolvable = "#22bb33"; - -// Color for waiting actions -export const waitColor: ColorResolvable = "#f0ad4e"; - -// Color for error actions -export const errorColor: ColorResolvable = "#bb2124"; - -// Footer text -export const footerText = - process.env["EMBED_FOOTER_TEXT"] || "https://github.com/ZynerOrg/xyter"; - -// Footer icon -export const footerIcon = - process.env["EMBED_FOOTER_ICON"] || "https://github.com/ZynerOrg.png"; diff --git a/src/config_docker/encryption.ts b/src/config_docker/encryption.ts deleted file mode 100644 index d54eb43..0000000 --- a/src/config_docker/encryption.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Encryption algorithm -export const algorithm = "aes-256-ctr"; - -// Encryption secret (strictly 32 length) -export const secretKey = - process.env["SECRET_KEY"] || "h/f#Ts8w5sch5L:J*_gPW)]$'!4K.K.-"; diff --git a/src/config_docker/other.ts b/src/config_docker/other.ts deleted file mode 100644 index 96cc6c3..0000000 --- a/src/config_docker/other.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Development features - -let isDevMode: boolean; - -if (process.env["NODE_ENV"] == "production") { - isDevMode = false; -} else { - isDevMode = true; -} - -export const devMode = isDevMode; - -// Development guild -export const guildId = process.env["DISCORD_DEV_GUILD_ID"]; - -// Hoster name -export const hosterName = process.env["HOSTER_NAME"]; - -// Hoster Url -export const hosterUrl = - process.env["HOSTER_URL"] || - "https://xyter.zyner.org/customization/change-hoster"; - -// Winston log level -export const logLevel = "info"; diff --git a/src/config_docker/reputation.ts b/src/config_docker/reputation.ts deleted file mode 100644 index 064edc9..0000000 --- a/src/config_docker/reputation.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Timeout between repute someone (seconds) -export const timeout = 86400; // One day diff --git a/src/types/enviroment.d.ts b/src/types/enviroment.d.ts deleted file mode 100644 index 5a55579..0000000 --- a/src/types/enviroment.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2022 Joshua Schmitt -// -// This software is released under the MIT License. -// https://opensource.org/licenses/MIT - -declare global { - namespace NodeJS { - interface ProcessEnv { - DB_HOST: string; - DB_PORT: string; - DB_USER: string; - DB_PASSWORD: string; - DISCORD_TOKEN: string; - DISCORD_CLIENT_ID: string; - DISCORD_DEV_GUILD_ID: string; - EMBED_FOOTER_TEXT: string; - EMBED_FOOTER_ICON: string; - SECRET_KEY: string; - DISCORD_DEV_GUILD_ID: string; - HOSTER_NAME: string; - HOSTER_URL: string; - NODE_ENV: string; - } - } -} - -export {}; From 854ea0ce5fed4751dffc5eb86fc955c8b288079a Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Tue, 5 Jul 2022 16:08:07 +0000 Subject: [PATCH 5/9] style: :lipstick: fix style --- src/plugins/commands/moderation/modules/prune/index.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/plugins/commands/moderation/modules/prune/index.ts b/src/plugins/commands/moderation/modules/prune/index.ts index c847e47..e556969 100644 --- a/src/plugins/commands/moderation/modules/prune/index.ts +++ b/src/plugins/commands/moderation/modules/prune/index.ts @@ -1,8 +1,5 @@ // Dependencies -import { - CommandInteraction, - Permissions, -} from "discord.js"; +import { CommandInteraction, Permissions } from "discord.js"; // Configurations import getEmbedConfig from "../../../../../helpers/getEmbedConfig"; From aa14252108adebf156e277195b51d892130f3de0 Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Tue, 5 Jul 2022 21:56:46 +0200 Subject: [PATCH 6/9] fix: :construction: fix review files --- .env.docker | 31 ++++++++++++++++++++++++++++ Dockerfile | 7 +++++-- docker-compose.dev.yml | 46 ++++++++++++++++++++++-------------------- docker-compose.yml | 46 ++++++++++++++++++++++-------------------- 4 files changed, 84 insertions(+), 46 deletions(-) create mode 100644 .env.docker diff --git a/.env.docker b/.env.docker new file mode 100644 index 0000000..98657c8 --- /dev/null +++ b/.env.docker @@ -0,0 +1,31 @@ +# RENAME THIS FILE TO .env TO USE IT WITH DOCKER! + +# Discord +DISCORD_TOKEN= +DISCORD_CLIENT_ID= +DISCORD_GUILD_ID= + +# Database +MONGO_USER= +MONGO_PASS= + +# Encryption +ENCRYPTION_ALGORITHM=aes-256-ctr +ENCRYPTION_SECRET=A RANDOM STRING WITH LENGTH OF 32 + +#Embed +EMEBD_COLOR_SUCCESS=#22bb33 +EMBED_COLOR_WAIT=#f0ad4e +EMBED_COLOR_ERROR=#bb2124 +EMBED_FOOTER_TEXT=https://github.com/ZynerOrg/xyter +EMBED_FOOTER_ICON=https://github.com/ZynerOrg.png + +# Log +LOG_LEVEL=silly + +# Reputation +REPUTATION_TIMEOUT=86400 + +# Bot Hoster +BOT_HOSTER_NAME=Zyner +BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster diff --git a/Dockerfile b/Dockerfile index af5581d..a626b7a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM node:16 LABEL maintainer="xyter@zyner.org" -WORKDIR /app +WORKDIR /build COPY package* . RUN npm install @@ -11,6 +11,9 @@ COPY . . RUN npx -y tsc -WORKDIR /app/build +WORKDIR /app + +RUN cp -r /build/build/* . +RUN cp -r /build/node_modules . CMD [ "node", "." ] \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 5765287..fed3dc4 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -5,29 +5,31 @@ services: build: . restart: unless-stopped environment: - - DISCORD_TOKEN=YOUR TOKEN - - DISCORD_CLIENT_ID=YOUR CLIENT ID - - DISCORD_GUILD_ID=YOUR GUILD ID - ### LEAVE THIS AS IT IS! ### - - MONGO_URL=mongodb://mongodb:27017/xyter?retryWrites=true&w=majority - ############################ - - ENCRYPTION_ALGORITHM=aes-256-ctr - - ENCRYPTION_SECRET=A RANDOM STRING WITH LENGTH OF 32 - - EMEBD_COLOR_SUCCESS=#22bb33 - - EMBED_COLOR_WAIT=#f0ad4e - - EMBED_COLOR_ERROR=#bb2124 - - EMBED_FOOTER_TEXT=https://github.com/ZynerOrg/xyter - - EMBED_FOOTER_ICON=https://github.com/ZynerOrg.png - - LOG_LEVEL=silly - - REPUTATION_TIMEOUT=86400 - - BOT_HOSTER_NAME=Zyner - - BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster - - NODE_ENV=production + - DISCORD_TOKEN=${DISCORD_TOKEN} + - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID} + - DISCORD_GUILD_ID=${DISCORD_GUILD_ID} + - MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASS}@mongodb:27017/admin?retryWrites=true&w=majority + - ENCRYPTION_ALGORITHM=${ENCRYPTION_ALGORITHM} + - ENCRYPTION_SECRET=${ENCRYPTION_SECRET} + - EMEBD_COLOR_SUCCESS=${EMEBD_COLOR_SUCCESS} + - EMBED_COLOR_WAIT=${EMBED_COLOR_WAIT} + - EMBED_COLOR_ERROR=${EMBED_COLOR_ERROR} + - EMBED_FOOTER_TEXT=${EMBED_FOOTER_TEXT} + - EMBED_FOOTER_ICON=${EMBED_FOOTER_ICON} + - LOG_LEVEL=${LOG_LEVEL} + - REPUTATION_TIMEOUT=${REPUTATION_TIMEOUT} + - BOT_HOSTER_NAME=${BOT_HOSTER_NAME} + - BOT_HOSTER_URL=${BOT_HOSTER_URL} + - NODE_ENV=development stdin_open: true tty: true - mongodb: - image: mongo:4.2.21 - restart: unless-stopped volumes: - - ./logs:/app/build/logs + - ./logs:/app/logs + mongodb: + image: mongo:latest + restart: unless-stopped + environment: + MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS} + volumes: - ./database:/data/db diff --git a/docker-compose.yml b/docker-compose.yml index 9b08008..7cc272a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,32 +2,34 @@ services: app: depends_on: - mongodb - image: zyner/xyter:2022.07.0 + image: zyner/xyter:latest restart: unless-stopped environment: - - DISCORD_TOKEN=YOUR TOKEN - - DISCORD_CLIENT_ID=YOUR CLIENT ID - - DISCORD_GUILD_ID=YOUR GUILD ID - ### LEAVE THIS AS IT IS! ### - - MONGO_URL=mongodb://mongodb:27017/xyter?retryWrites=true&w=majority - ############################ - - ENCRYPTION_ALGORITHM=aes-256-ctr - - ENCRYPTION_SECRET=A RANDOM STRING WITH LENGTH OF 32 - - EMEBD_COLOR_SUCCESS=#22bb33 - - EMBED_COLOR_WAIT=#f0ad4e - - EMBED_COLOR_ERROR=#bb2124 - - EMBED_FOOTER_TEXT=https://github.com/ZynerOrg/xyter - - EMBED_FOOTER_ICON=https://github.com/ZynerOrg.png - - LOG_LEVEL=silly - - REPUTATION_TIMEOUT=86400 - - BOT_HOSTER_NAME=Zyner - - BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster + - DISCORD_TOKEN=${DISCORD_TOKEN} + - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID} + - DISCORD_GUILD_ID=${DISCORD_GUILD_ID} + - MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASS}@mongodb:27017/admin?retryWrites=true&w=majority + - ENCRYPTION_ALGORITHM=${ENCRYPTION_ALGORITHM} + - ENCRYPTION_SECRET=${ENCRYPTION_SECRET} + - EMEBD_COLOR_SUCCESS=${EMEBD_COLOR_SUCCESS} + - EMBED_COLOR_WAIT=${EMBED_COLOR_WAIT} + - EMBED_COLOR_ERROR=${EMBED_COLOR_ERROR} + - EMBED_FOOTER_TEXT=${EMBED_FOOTER_TEXT} + - EMBED_FOOTER_ICON=${EMBED_FOOTER_ICON} + - LOG_LEVEL=${LOG_LEVEL} + - REPUTATION_TIMEOUT=${REPUTATION_TIMEOUT} + - BOT_HOSTER_NAME=${BOT_HOSTER_NAME} + - BOT_HOSTER_URL=${BOT_HOSTER_URL} - NODE_ENV=production stdin_open: true tty: true - mongodb: - image: mongo:4.2.21 - restart: unless-stopped volumes: - - ./logs:/app/build/logs + - ./logs:/app/logs + mongodb: + image: mongo:latest + restart: unless-stopped + environment: + MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS} + volumes: - ./database:/data/db From b7dc2b6fc6ce111496d3f818aaa9bf1e9c59a1ed Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Wed, 6 Jul 2022 19:03:45 +0200 Subject: [PATCH 7/9] fix: :construction: done review --- .env.docker | 31 ------------------------------- .env.example | 4 ++++ 2 files changed, 4 insertions(+), 31 deletions(-) delete mode 100644 .env.docker diff --git a/.env.docker b/.env.docker deleted file mode 100644 index 98657c8..0000000 --- a/.env.docker +++ /dev/null @@ -1,31 +0,0 @@ -# RENAME THIS FILE TO .env TO USE IT WITH DOCKER! - -# Discord -DISCORD_TOKEN= -DISCORD_CLIENT_ID= -DISCORD_GUILD_ID= - -# Database -MONGO_USER= -MONGO_PASS= - -# Encryption -ENCRYPTION_ALGORITHM=aes-256-ctr -ENCRYPTION_SECRET=A RANDOM STRING WITH LENGTH OF 32 - -#Embed -EMEBD_COLOR_SUCCESS=#22bb33 -EMBED_COLOR_WAIT=#f0ad4e -EMBED_COLOR_ERROR=#bb2124 -EMBED_FOOTER_TEXT=https://github.com/ZynerOrg/xyter -EMBED_FOOTER_ICON=https://github.com/ZynerOrg.png - -# Log -LOG_LEVEL=silly - -# Reputation -REPUTATION_TIMEOUT=86400 - -# Bot Hoster -BOT_HOSTER_NAME=Zyner -BOT_HOSTER_URL=https://xyter.zyner.org/customization/change-hoster diff --git a/.env.example b/.env.example index 51665d3..dde1afc 100644 --- a/.env.example +++ b/.env.example @@ -6,7 +6,11 @@ DISCORD_CLIENT_ID="" DISCORD_GUILD_ID="" # Database +# Comment this if youre using docker-compose MONGO_URL="mongodb+srv://username:password@host/database?retryWrites=true&w=majority" +# Uncomment this if youre using docker-compose +# MONGO_USER=YOUR_DOCKER_COMPOSE_MONGO_USER +# MONGO_PASS=YOUR_DOCKER_COMPOSE_MONGO_PASSWORD # Encryption ENCRYPTION_ALGORITHM="aes-256-ctr" From 66992a75564eafa4ee1b65a9d054ce2be1e433d5 Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Wed, 6 Jul 2022 19:06:04 +0200 Subject: [PATCH 8/9] fix: :art: set docker-compose version --- docker-compose.dev.yml | 2 ++ docker-compose.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index fed3dc4..b88dfdc 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,3 +1,5 @@ +version: '3' + services: app: depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index 7cc272a..ef0c445 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,5 @@ +version: '3' + services: app: depends_on: From df3ac05ac84d2f45aaedb28ab7f5007f935f1ea1 Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Thu, 14 Jul 2022 20:46:11 +0200 Subject: [PATCH 9/9] fix: :bug: fix env to docker-compose file --- .env.example | 4 ---- docker-compose.dev.yml | 36 ++++++++++++++++++------------------ docker-compose.yml | 36 ++++++++++++++++++------------------ 3 files changed, 36 insertions(+), 40 deletions(-) diff --git a/.env.example b/.env.example index dde1afc..51665d3 100644 --- a/.env.example +++ b/.env.example @@ -6,11 +6,7 @@ DISCORD_CLIENT_ID="" DISCORD_GUILD_ID="" # Database -# Comment this if youre using docker-compose MONGO_URL="mongodb+srv://username:password@host/database?retryWrites=true&w=majority" -# Uncomment this if youre using docker-compose -# MONGO_USER=YOUR_DOCKER_COMPOSE_MONGO_USER -# MONGO_PASS=YOUR_DOCKER_COMPOSE_MONGO_PASSWORD # Encryption ENCRYPTION_ALGORITHM="aes-256-ctr" diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index b88dfdc..ba7a2ba 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: app: @@ -7,21 +7,21 @@ services: build: . restart: unless-stopped environment: - - DISCORD_TOKEN=${DISCORD_TOKEN} - - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID} - - DISCORD_GUILD_ID=${DISCORD_GUILD_ID} - - MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASS}@mongodb:27017/admin?retryWrites=true&w=majority - - ENCRYPTION_ALGORITHM=${ENCRYPTION_ALGORITHM} - - ENCRYPTION_SECRET=${ENCRYPTION_SECRET} - - EMEBD_COLOR_SUCCESS=${EMEBD_COLOR_SUCCESS} - - EMBED_COLOR_WAIT=${EMBED_COLOR_WAIT} - - EMBED_COLOR_ERROR=${EMBED_COLOR_ERROR} - - EMBED_FOOTER_TEXT=${EMBED_FOOTER_TEXT} - - EMBED_FOOTER_ICON=${EMBED_FOOTER_ICON} - - LOG_LEVEL=${LOG_LEVEL} - - REPUTATION_TIMEOUT=${REPUTATION_TIMEOUT} - - BOT_HOSTER_NAME=${BOT_HOSTER_NAME} - - BOT_HOSTER_URL=${BOT_HOSTER_URL} + - DISCORD_TOKEN=DISCORD_TOKEN + - DISCORD_CLIENT_ID=DISCORD_CLIENT_ID + - DISCORD_GUILD_ID=DISCORD_GUILD_ID + - MONGO_URL=mongodb://MONGO_USER:MONGO_PASS@mongodb:27017/admin?retryWrites=true&w=majority + - ENCRYPTION_ALGORITHM=ENCRYPTION_ALGORITHM + - ENCRYPTION_SECRET=ENCRYPTION_SECRET + - EMEBD_COLOR_SUCCESS=EMEBD_COLOR_SUCCESS + - EMBED_COLOR_WAIT=EMBED_COLOR_WAIT + - EMBED_COLOR_ERROR=EMBED_COLOR_ERROR + - EMBED_FOOTER_TEXT=EMBED_FOOTER_TEXT + - EMBED_FOOTER_ICON=EMBED_FOOTER_ICON + - LOG_LEVEL=LOG_LEVEL + - REPUTATION_TIMEOUT=REPUTATION_TIMEOUT + - BOT_HOSTER_NAME=BOT_HOSTER_NAME + - BOT_HOSTER_URL=BOT_HOSTER_URL - NODE_ENV=development stdin_open: true tty: true @@ -31,7 +31,7 @@ services: image: mongo:latest restart: unless-stopped environment: - MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER} - MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS} + MONGO_INITDB_ROOT_USERNAME: MONGO_USER + MONGO_INITDB_ROOT_PASSWORD: MONGO_PASS volumes: - ./database:/data/db diff --git a/docker-compose.yml b/docker-compose.yml index ef0c445..2d67fb5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: app: @@ -7,21 +7,21 @@ services: image: zyner/xyter:latest restart: unless-stopped environment: - - DISCORD_TOKEN=${DISCORD_TOKEN} - - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID} - - DISCORD_GUILD_ID=${DISCORD_GUILD_ID} - - MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASS}@mongodb:27017/admin?retryWrites=true&w=majority - - ENCRYPTION_ALGORITHM=${ENCRYPTION_ALGORITHM} - - ENCRYPTION_SECRET=${ENCRYPTION_SECRET} - - EMEBD_COLOR_SUCCESS=${EMEBD_COLOR_SUCCESS} - - EMBED_COLOR_WAIT=${EMBED_COLOR_WAIT} - - EMBED_COLOR_ERROR=${EMBED_COLOR_ERROR} - - EMBED_FOOTER_TEXT=${EMBED_FOOTER_TEXT} - - EMBED_FOOTER_ICON=${EMBED_FOOTER_ICON} - - LOG_LEVEL=${LOG_LEVEL} - - REPUTATION_TIMEOUT=${REPUTATION_TIMEOUT} - - BOT_HOSTER_NAME=${BOT_HOSTER_NAME} - - BOT_HOSTER_URL=${BOT_HOSTER_URL} + - DISCORD_TOKEN=DISCORD_TOKEN + - DISCORD_CLIENT_ID=DISCORD_CLIENT_ID + - DISCORD_GUILD_ID=DISCORD_GUILD_ID + - MONGO_URL=mongodb://MONGO_USER:MONGO_PASS@mongodb:27017/admin?retryWrites=true&w=majority + - ENCRYPTION_ALGORITHM=ENCRYPTION_ALGORITHM + - ENCRYPTION_SECRET=ENCRYPTION_SECRET + - EMEBD_COLOR_SUCCESS=EMEBD_COLOR_SUCCESS + - EMBED_COLOR_WAIT=EMBED_COLOR_WAIT + - EMBED_COLOR_ERROR=EMBED_COLOR_ERROR + - EMBED_FOOTER_TEXT=EMBED_FOOTER_TEXT + - EMBED_FOOTER_ICON=EMBED_FOOTER_ICON + - LOG_LEVEL=LOG_LEVEL + - REPUTATION_TIMEOUT=REPUTATION_TIMEOUT + - BOT_HOSTER_NAME=BOT_HOSTER_NAME + - BOT_HOSTER_URL=BOT_HOSTER_URL - NODE_ENV=production stdin_open: true tty: true @@ -31,7 +31,7 @@ services: image: mongo:latest restart: unless-stopped environment: - MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER} - MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS} + MONGO_INITDB_ROOT_USERNAME: MONGO_USER + MONGO_INITDB_ROOT_PASSWORD: MONGO_PASS volumes: - ./database:/data/db