From b1cebba225f431d9b5a7a38524f8efa2fcdb5b66 Mon Sep 17 00:00:00 2001 From: Joshua Schmitt Date: Mon, 4 Jul 2022 15:41:31 +0000 Subject: [PATCH] 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 00000000..bf1e1493 --- /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 00000000..007f637d --- /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 ac149cc2..02a2bd2b 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 00000000..0d51b49c --- /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 00000000..f3f9c4a5 --- /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 00000000..81430e5c --- /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 00000000..d54eb433 --- /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 00000000..96cc6c34 --- /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 00000000..064edc9a --- /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 00000000..5a55579d --- /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 {};