Skip to content
This repository was archived by the owner on Jul 1, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
.env
src/miscellaneous/migratenicknames.js
test.js
8 changes: 4 additions & 4 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ GLOBAL_BOT_PREFIX=v3
CREATOR_IDS=212445217763229699
MESSAGE_BATCH_SIZE=10
PASTE_CREATE_ENDPOINT=host your own haste-server instance to get this
PGUSER=postgresusername
PGPASSWORD=postgrespassword
PGHOST=localhost
PGDATABASE=logger
POSTGRES_USER=postgresusername # will be ignored on Docker
POSTGRES_PASSWORD=postgrespassword
POSTGRES_HOST=localhost # will be ignored on Docker
POSTGRES_DB=logger
REDIS_LOCK_TTL=2000
AES_KEY=youraeskey
MESSAGE_HISTORY_DAYS=how many days as an int you want to be wiped from db
Expand Down
17 changes: 17 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# get node
FROM node:18.5.0-buster-slim

# Create app directory
WORKDIR /usr/src/app

# Get app dependencies
COPY package*.json ./

# building app
RUN npm i --omit=dev --verbose

# Bundle app source
COPY . .

# start up command for bot
CMD [ "npm", "start" ]
50 changes: 50 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Use .env. Only edit this, if you know your stuff.
services:
app:
build:
context: ./
restart: always
env_file:
- .env
depends_on:
- cache
- db
- setup
environment:
REDIS_HOST: cache
POSTGRES_HOST: db
POSTGRES_USER: ${POSTGRES_DB}

setup:
build:
context: .
command: "npm run setupdb"
restart: on-failure
depends_on:
- db
environment:
DOCKER: true
POSTGRES_USER: ${POSTGRES_DB}
POSTGRES_PASSWORD:
POSTGRES_HOST: db
POSTGRES_DB:

cache:
image: redis:6.2-alpine
restart: always
command: redis-server --save 20 1 --loglevel warning
volumes:
- cache:/data

db:
image: postgres:16-alpine
restart: always
volumes:
- db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD:
POSTGRES_USER:

volumes:
db:
cache:
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
"main": "index.js",
"scripts": {
"test": "standard",
"lint": "node_modules/.bin/eslint . --ext .js"
"lint": "node_modules/.bin/eslint . --ext .js",
"start": "node index.js",
"setupdb": "node src/miscellaneous/generateDB.js"
},
"keywords": [
"logging",
Expand Down
10 changes: 5 additions & 5 deletions src/db/clients/postgres.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ const { Client, Pool } = require('pg') // PREREQUISITE: Have postgres installed

require('dotenv').config()
const pool = new Pool({
user: process.env.PGUSER,
host: process.env.PGHOST,
database: process.env.PGDATABASE,
password: process.env.PGPASSWORD,
port: process.env.PGPORT || 5432,
user: process.env.POSTGRES_USER,
host: process.env.POSTGRES_HOST,
database: process.env.POSTGRES_DB,
password: process.env.POSTGRES_PASSWORD,
port: process.env.POSTGRES_PORT || 5432,
max: 5 // 5 clients each, god help us all if this isn't sufficient
})

Expand Down
22 changes: 11 additions & 11 deletions src/miscellaneous/generateDB.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,28 @@ const { Pool } = require('pg')
require('dotenv').config()

const pool = new Pool({
user: process.env.PGUSER, // Make sure PGUSER is a superuser
host: process.env.PGHOST,
user: process.env.POSTGRES_USER, // Make sure POSTGRES_USER is a superuser
host: process.env.POSTGRES_HOST,
database: 'template1', // Should exist in all postgres databases by default
password: process.env.PGPASSWORD,
password: process.env.POSTGRES_PASSWORD,
port: 5432
})

pool.on('error', e => {
console.error('There was an error while generating the database structure!', e)
})

async function generate () {
await pool.query('CREATE DATABASE logger') // create db
async function generate() {
if (!process.env.DOCKER) await pool.query(`CREATE DATABASE ${process.env.POSTGRES_DB}`) // create db
const loggerDB = new Pool({
user: process.env.PGUSER,
host: process.env.PGHOST,
database: 'logger',
password: process.env.PGPASSWORD,
user: process.env.POSTGRES_USER,
host: process.env.POSTGRES_HOST,
database: process.env.POSTGRES_DB,
password: process.env.POSTGRES_PASSWORD,
port: 5432
})
await loggerDB.query('CREATE TABLE messages ( id TEXT PRIMARY KEY, author_id TEXT NOT NULL, content TEXT, attachment_b64 TEXT, ts TIMESTAMPTZ )') // establish messages table
await loggerDB.query('CREATE TABLE guilds ( id TEXT PRIMARY KEY, owner_id TEXT NOT NULL, ignored_channels TEXT[], disabled_events TEXT[], event_logs JSON, log_bots BOOL, custom_settings JSON )') // establish guilds table
await loggerDB.query('CREATE TABLE IF NOT EXISTS messages ( id TEXT PRIMARY KEY, author_id TEXT NOT NULL, content TEXT, attachment_b64 TEXT, ts TIMESTAMPTZ )') // establish messages table
await loggerDB.query('CREATE TABLE IF NOT EXISTS guilds ( id TEXT PRIMARY KEY, owner_id TEXT NOT NULL, ignored_channels TEXT[], disabled_events TEXT[], event_logs JSON, log_bots BOOL, custom_settings JSON )') // establish guilds table
console.log('DB Generated!')
}

Expand Down