diff --git a/commands/general/broadcast.js b/commands/general/broadcast.js index cb66b22..3941d9d 100644 --- a/commands/general/broadcast.js +++ b/commands/general/broadcast.js @@ -1,4 +1,5 @@ import Command from "../../classes/command.js"; +import database from "../../utils/database.js"; import { endBroadcast, startBroadcast } from "../../utils/misc.js"; class BroadcastCommand extends Command { @@ -10,6 +11,7 @@ class BroadcastCommand extends Command { } const message = this.options.message ?? this.args.join(" "); if (message?.trim()) { + await database.setBroadcast(message); startBroadcast(this.client, message); if (process.env.PM2_USAGE) { process.send({ @@ -22,6 +24,7 @@ class BroadcastCommand extends Command { } return "Started broadcast."; } else { + await database.setBroadcast(null); endBroadcast(this.client); if (process.env.PM2_USAGE) { process.send({ diff --git a/config/messages.json b/config/messages.json index 5843df1..86b9ec8 100644 --- a/config/messages.json +++ b/config/messages.json @@ -195,6 +195,7 @@ "Trials Rising", "Pizza Tower", "ANTONBLAST", + "[object Object]", "The clock is ticking." ] } diff --git a/events/ready.js b/events/ready.js index 769b1b4..4b2a81a 100644 --- a/events/ready.js +++ b/events/ready.js @@ -27,7 +27,7 @@ export default async (client) => { logger.log("info", "The help docs have been generated."); } - checkBroadcast(client); + await checkBroadcast(client); activityChanger(client); ready = true; diff --git a/utils/database/dummy.js b/utils/database/dummy.js index 1ffcd24..08e98d9 100644 --- a/utils/database/dummy.js +++ b/utils/database/dummy.js @@ -20,6 +20,8 @@ export async function getTag() {} export async function setTag() {} export async function removeTag() {} export async function editTag() {} +export async function setBroadcast() {} +export async function getBroadcast() {} export async function setPrefix() {} export async function addGuild(guild) { return { diff --git a/utils/database/postgresql.js b/utils/database/postgresql.js index afccb03..c856806 100644 --- a/utils/database/postgresql.js +++ b/utils/database/postgresql.js @@ -7,7 +7,8 @@ const sql = Postgres(process.env.DB); const psqlUpdates = [ "", // reserved "CREATE TABLE IF NOT EXISTS settings ( id smallint PRIMARY KEY, version integer NOT NULL, CHECK(id = 1) );\nALTER TABLE guilds ADD COLUMN accessed timestamp;", - "ALTER TABLE guilds DROP COLUMN accessed" + "ALTER TABLE guilds DROP COLUMN accessed", + "ALTER TABLE settings ADD COLUMN broadcast text" ]; export async function setup() { @@ -56,7 +57,7 @@ export async function upgrade(logger) { while (version < (psqlUpdates.length - 1)) { version++; logger.warn(`Running version ${version} update script (${psqlUpdates[version]})...`); - await db`${psqlUpdates[version]}`; + await db.unsafe(psqlUpdates[version]); } }); const ver = psqlUpdates.length - 1; @@ -104,6 +105,15 @@ export async function removeTag(name, guild) { await sql`DELETE FROM tags WHERE guild_id = ${guild.id} AND name = ${name}`; } +export async function setBroadcast(msg) { + await sql`UPDATE settings SET broadcast = ${msg} WHERE id = 1`; +} + +export async function getBroadcast() { + const result = await sql`SELECT broadcast FROM settings WHERE id = 1`; + return result[0].broadcast; +} + export async function disableCommand(guild, command) { const guildDB = await this.getGuild(guild); await sql`UPDATE guilds SET disabled_commands = ${(guildDB.disabled_commands ? [...guildDB.disabled_commands, command] : [command]).filter((v) => !!v)} WHERE guild_id = ${guild}`; diff --git a/utils/database/sqlite.js b/utils/database/sqlite.js index d771562..c30d345 100644 --- a/utils/database/sqlite.js +++ b/utils/database/sqlite.js @@ -7,7 +7,8 @@ const connection = sqlite3(process.env.DB.replace("sqlite://", "")); const sqliteUpdates = [ "", // reserved "ALTER TABLE guilds ADD COLUMN accessed int", - "ALTER TABLE guilds DROP COLUMN accessed" + "ALTER TABLE guilds DROP COLUMN accessed", + "CREATE TABLE IF NOT EXISTS settings ( id smallint PRIMARY KEY, broadcast VARCHAR, CHECK(id = 1) );\nINSERT INTO settings (id) VALUES (1) ON CONFLICT (id) DO NOTHING;" ]; export async function setup() { @@ -151,6 +152,15 @@ export async function editTag(name, content, guild) { connection.prepare("UPDATE tags SET content = ?, author = ? WHERE guild_id = ? AND name = ?").run(content.content, content.author, guild.id, name); } +export async function setBroadcast(msg) { + connection.prepare("UPDATE settings SET broadcast = ? WHERE id = 1").run(msg); +} + +export async function getBroadcast() { + const result = connection.prepare("SELECT broadcast FROM settings WHERE id = 1").all(); + return result[0].broadcast; +} + export async function setPrefix(prefix, guild) { connection.prepare("UPDATE guilds SET prefix = ? WHERE guild_id = ?").run(prefix, guild.id); collections.prefixCache.set(guild.id, prefix); diff --git a/utils/misc.js b/utils/misc.js index b66327a..1ad6241 100644 --- a/utils/misc.js +++ b/utils/misc.js @@ -2,6 +2,7 @@ import util from "util"; import fs from "fs"; import pm2 from "pm2"; import { config } from "dotenv"; +import db from "./database.js"; // playing messages const { messages } = JSON.parse(fs.readFileSync(new URL("../config/messages.json", import.meta.url))); @@ -62,10 +63,11 @@ export async function activityChanger(bot) { setTimeout(() => activityChanger(bot), 900000); } -export function checkBroadcast(bot) { - /*if () { +export async function checkBroadcast(bot) { + const message = await db.getBroadcast(); + if (message) { startBroadcast(bot, message); - }*/ + } } export function startBroadcast(bot, message) { @@ -116,7 +118,7 @@ export function getServers(bot) { export function cleanMessage(message, content) { let cleanContent = content && content.replace(//g, "$1") || ""; - const author = message.author ?? message.member; + const author = message.author ?? message.member ?? message.user; let authorName = author.username; if (message.member?.nick) { authorName = message.member.nick; diff --git a/utils/psqlinit.sh b/utils/psqlinit.sh index df454ee..cdbe63f 100644 --- a/utils/psqlinit.sh +++ b/utils/psqlinit.sh @@ -6,6 +6,6 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-E CREATE TABLE counts ( command VARCHAR NOT NULL PRIMARY KEY, count integer NOT NULL ); CREATE TABLE tags ( guild_id VARCHAR(30) NOT NULL, name text NOT NULL, content text NOT NULL, author VARCHAR(30) NOT NULL, UNIQUE(guild_id, name) ); - CREATE TABLE settings ( id smallint PRIMARY KEY, version integer NOT NULL, CHECK(id = 1) ); + CREATE TABLE settings ( id smallint PRIMARY KEY, version integer NOT NULL, broadcast VARCHAR, CHECK(id = 1) ); INSERT INTO settings (id, version) VALUES (1, 2) ON CONFLICT (id) DO NOTHING; EOSQL