diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index fdfc38b..9bb55cf 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -47,7 +47,10 @@
+
+
+
@@ -65,9 +68,12 @@
+
+
+
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
index a55e7a1..79ee123 100644
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/src/lib/utils/augments.ts b/migrations/1625158649230_initial.js
similarity index 73%
rename from src/lib/utils/augments.ts
rename to migrations/1625158649230_initial.js
index c7b1075..09184fa 100644
--- a/src/lib/utils/augments.ts
+++ b/migrations/1625158649230_initial.js
@@ -15,12 +15,17 @@
* along with ArgonBot. If not, see .
*/
-import type ArgonClient from '@lib/ArgonClient';
-import type Command from '@structures/command';
+exports.shorthands = undefined;
-declare module 'discord.js' {
- export interface Client {
- constructor: typeof ArgonClient;
- readonly commands: Collection;
- }
-}
+exports.up = (pgm) => {
+ pgm.createTable('settings', {
+ id: {
+ type: 'varchar(20)',
+ },
+ locale: {
+ type: 'varchar(10)',
+ default: 'en-US',
+ notNull: true,
+ },
+ });
+};
diff --git a/src/commands/admin/settings.ts b/src/commands/admin/settings.ts
new file mode 100644
index 0000000..f3b49c2
--- /dev/null
+++ b/src/commands/admin/settings.ts
@@ -0,0 +1,102 @@
+/*
+ * This file is part of ArgonBot
+ *
+ * ArgonBot is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * ArgonBot is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ArgonBot. If not, see .
+ */
+import Command from '@structures/command';
+import { ECommandRunIn, IGuildSettings } from '@utils/types';
+import { query } from '@utils/utils';
+import type { Client, Message } from 'discord.js';
+import i18next from 'i18next';
+import SQL from 'sql-template-strings';
+
+export default class extends Command {
+ public constructor(client: Client, file: string) {
+ super(client, file, {
+ shortDescription: i18next.t('commands:settings.shortDescription'),
+ extendedDescription: i18next.t('commands:settings.extendedDescription'),
+ usage: 'set locale en-US',
+ runIn: ECommandRunIn.Server,
+ args: [
+ {
+ name: 'action',
+ acceptedValues: [ 'set', 'get', 'reset' ],
+ description: i18next.t('commands:settings.actionArg'),
+ },
+ {
+ name: 'setting',
+ description: i18next.t('commands:settings.settingArg'),
+ },
+ {
+ name: 'value',
+ description: i18next.t('commands:settings.valueArg'),
+ optional: true,
+ goToEnd: true,
+ },
+ ],
+ });
+ }
+
+ public async run(message: Message, action: string, setting: string, value: string): Promise {
+ switch(action) {
+ case 'set':
+ await this.setSetting(message, setting, value);
+ break;
+ case 'get':
+ break;
+ case 'reset':
+ break;
+ default:
+ break;
+ }
+ }
+
+ private async setSetting(message: Message, setting: string, value: string): Promise {
+ let findGuild = await query(SQL`SELECT *
+ FROM bot.public.settings
+ WHERE id = ${message.guild?.id}`);
+
+ if(findGuild && findGuild.rowCount === 0) {
+ await query(SQL`INSERT INTO bot.public.settings (id)
+ VALUES (${message.guild?.id})`);
+ findGuild = await query(SQL`SELECT *
+ FROM bot.public.settings
+ WHERE id = ${message.guild?.id}`);
+ }
+
+ switch(setting) {
+ case 'locale':
+ case 'language':
+ if(findGuild) {
+ const guildSettings = findGuild.rows[0]!;
+ if(guildSettings.locale === value)
+ await message.reply(i18next.t('commands:settings.localeAlreadySet', { locale: guildSettings.locale }));
+ else {
+ await query(SQL`UPDATE bot.public.settings
+ SET locale=${value}
+ WHERE id = ${message.guild?.id}`);
+
+ await message.channel.send(i18next.t('commands:settings.localeSuccessfullySet', { locale: value }));
+ }
+ }
+ break;
+ case 'get':
+ break;
+ case 'reset':
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/src/index.ts b/src/index.ts
index 9960088..d6febcd 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -15,13 +15,12 @@
* along with ArgonBot. If not, see .
*/
import 'module-alias/register';
-import '@utils/augments';
import ArgonClient from '@lib/ArgonClient';
import { Defaults } from '@utils/defaults';
import { debug, error, fatal, info, verbose } from '@utils/logger';
import { ECommandRunIn, ELoggingScope } from '@utils/types';
-import { connectToDB, query, walkDir } from '@utils/utils';
+import { connectToDB, walkDir } from '@utils/utils';
import chalk from 'chalk';
import config from 'config';
import { Collection } from 'discord.js';
@@ -36,7 +35,6 @@ import FSBackend from 'i18next-fs-backend';
import { Validator } from 'jsonschema';
import { DateTime } from 'luxon';
import process from 'process';
-import { SQL } from 'sql-template-strings';
const commandCooldowns: Collection> = new Collection();
let isBotReady = false;
diff --git a/src/lib/extensions/ArgonGuild.ts b/src/lib/extensions/ArgonGuild.ts
new file mode 100644
index 0000000..2686a0b
--- /dev/null
+++ b/src/lib/extensions/ArgonGuild.ts
@@ -0,0 +1,16 @@
+/*
+ * This file is part of ArgonBot
+ *
+ * ArgonBot is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * ArgonBot is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ArgonBot. If not, see .
+ */
diff --git a/src/lib/utils/types.ts b/src/lib/utils/types.ts
index 62570b7..338a74e 100644
--- a/src/lib/utils/types.ts
+++ b/src/lib/utils/types.ts
@@ -49,4 +49,9 @@ export interface ICommandOptions {
}[];
}
+export interface IGuildSettings {
+ id: string,
+ locale: string;
+}
+
// Type Aliases
diff --git a/src/lib/utils/utils.ts b/src/lib/utils/utils.ts
index d097cae..9b8dde2 100644
--- a/src/lib/utils/utils.ts
+++ b/src/lib/utils/utils.ts
@@ -76,7 +76,7 @@ export const connectToDB = async (connectionData: pg.PoolConfig): Promise
});
};
-export const query = async (query: SQLStatement): Promise=> {
+export const query = async (query: SQLStatement): Promise | void> => {
if(!pool) return error('Attempted to query to the Database when a connection has not been made yet... Discarding' +
' request.', ELoggingScope.Query);
else {
@@ -87,7 +87,7 @@ export const query = async (query: SQLStatement): Promise=>
await client.query('BEGIN');
info(query.text, ELoggingScope.Query);
- const result = await client.query(query);
+ const result = await client.query(query);
info('COMMIT', ELoggingScope.Query);
await client.query('COMMIT');
diff --git a/translations/en-US/commands.json b/translations/en-US/commands.json
index 0702706..816a621 100644
--- a/translations/en-US/commands.json
+++ b/translations/en-US/commands.json
@@ -21,6 +21,15 @@
"commandDescription": "Name: `{ $name }`\nCategory: `{ $category }`\nDescription: `{ $description }`\nUsage: `{ $usage }`",
"categoryPlaceholder": "Choose a category!"
},
+ "settings": {
+ "shortDescription": "Changes the current server settings",
+ "extendedDescription": "Changes the current server settings for better server customization",
+ "actionArg": "What action you want to take",
+ "settingArg": "What setting you want to view/set\nOr optionally, you can put 'help' if you are unsure what to do with that action",
+ "valueArg": "The value you want to set (This is ignored if you are only getting/resetting a setting).",
+ "localeAlreadySet": "The language of the bot in this server is already set to { $locale }!",
+ "localeSuccessfullySet": "The language of the bot has been successfully set to { $locale }!"
+ },
"errors": {
"ownerOnly": "Only the bot owner can run this command!",
"dmsOnly": "You can only run this command in DMs!",