diff --git a/source/Database/DatabaseDefinition.ts b/source/Database/DatabaseDefinition.ts index b650205..1ee4bf5 100644 --- a/source/Database/DatabaseDefinition.ts +++ b/source/Database/DatabaseDefinition.ts @@ -5,6 +5,7 @@ export type DatabaseColumnDefinition = { autoIncrement?: boolean; notNull?: boolean; options?: string; + size?: number; } export type DatabaseDefinition = { diff --git a/source/Database/DatabaseUpdater.ts b/source/Database/DatabaseUpdater.ts index f08a5c9..c83b929 100644 --- a/source/Database/DatabaseUpdater.ts +++ b/source/Database/DatabaseUpdater.ts @@ -48,33 +48,21 @@ export class DatabaseUpdater { const columnsSQL = missingColumns.map((column: DatabaseColumnDefinition) => { const values = [ "ADD", - column.name, - column.type, - column.primaryKey ? `PRIMARY KEY` : '', - column.notNull ? 'NOT NULL' : '', - column.autoIncrement ? 'AUTOINCREMENT' : '', + this.getSQLColumnDefinition(column) ] return values.join(' '); }).join(', '); const sql = `ALTER TABLE ${definition.name} ${columnsSQL}`; - this.database.execute(sql); + console.log(sql); } private createTable(definition: DatabaseDefinition) { - const columnsSQL = definition.columns.map((column: DatabaseColumnDefinition) => { - const values = [ - column.name, - column.type, - column.primaryKey ? `PRIMARY KEY` : '', - column.notNull ? 'NOT NULL' : '', - column.autoIncrement ? 'AUTOINCREMENT' : '', - ] - - return values.join(' '); - }).join(', '); + const columnsSQL = definition.columns.map((column: DatabaseColumnDefinition) => + this.getSQLColumnDefinition(column) + ).join(', '); const sql = `CREATE TABLE IF NOT EXISTS ${definition.name} ( @@ -82,4 +70,16 @@ export class DatabaseUpdater { )`; this.database.execute(sql); } + + private getSQLColumnDefinition(column: DatabaseColumnDefinition) { + const values = [ + column.name, + `${column.type}${column.size ? `(${column.size})` : ''}`, + column.primaryKey ? `PRIMARY KEY` : '', + column.notNull ? 'NOT NULL' : '', + column.autoIncrement ? 'AUTOINCREMENT' : '', + ]; + + return values.join(' ') + } } \ No newline at end of file diff --git a/source/Database/tables/GroupConfiguration.ts b/source/Database/tables/GroupConfiguration.ts index e5449fc..14242ce 100644 --- a/source/Database/tables/GroupConfiguration.ts +++ b/source/Database/tables/GroupConfiguration.ts @@ -18,15 +18,17 @@ const dbDefinition: DatabaseDefinition = { }, { name: "groupid", - type: "VARCHAR(32)", + type: "INTEGER", }, { name: "key", - type: "VARCHAR(32)", + type: "VARCHAR", + size: 32 }, { name: "value", - type: "VARCHAR(128)", + type: "VARCHAR", + size: 2 ^ 11 } ] } diff --git a/source/Database/tables/Groups.ts b/source/Database/tables/Groups.ts index 3929355..0ebd1ff 100644 --- a/source/Database/tables/Groups.ts +++ b/source/Database/tables/Groups.ts @@ -19,19 +19,23 @@ const dbDefinition: DatabaseDefinition = { }, { name: "server", - type: "VARCHAR(32)" + type: "VARCHAR", + size: 32 }, { name: "name", - type: "VARCHAR(32)", + type: "VARCHAR", + size: 32 }, { name: "leader", - type: "VARCHAR(32)", + type: "VARCHAR", + size: 32 }, { name: "role", - type: "VARCHAR(32)", + type: "VARCHAR", + size: 32 } ] } diff --git a/source/Discord/Commands/Groups.ts b/source/Discord/Commands/Groups.ts index d817a43..ed02428 100644 --- a/source/Discord/Commands/Groups.ts +++ b/source/Discord/Commands/Groups.ts @@ -128,10 +128,9 @@ export class GroupCommand implements Command, ChatInteractionCommand, Autocomple ); } - const validName = this.validateGroupName(name); - // @ts-expect-error Is correct, since the valid name can return either true or a string and the error should only be thrown if it's a string. - if (name !== true) { - throw new UserError(`Your group name contains one or more invalid character sequences: ${validName}`) + const invalidName = this.validateGroupName(name); + if (invalidName) { + throw new UserError(`Your group name contains one or more invalid character sequences: ${invalidName}`) } const group: GroupModel = { @@ -152,7 +151,7 @@ export class GroupCommand implements Command, ChatInteractionCommand, Autocomple interaction.reply({content: `:white_check_mark: Created group \`${name}\``, flags: MessageFlags.Ephemeral}) } - private validateGroupName(name: string): true | string { + private validateGroupName(name: string): string | null { const lowercaseName = name.toLowerCase(); for (const invalidcharactersequence of GroupCommand.INVALID_CHARACTER_SEQUENCES) { if (!lowercaseName.includes(invalidcharactersequence)) { @@ -161,7 +160,7 @@ export class GroupCommand implements Command, ChatInteractionCommand, Autocomple return invalidcharactersequence } - return true; + return null; } private list(interaction: ChatInputCommandInteraction) { diff --git a/source/Groups/ConfigurationMenuHandler.ts b/source/Groups/ConfigurationMenuHandler.ts index 48b54f9..9b0fc19 100644 --- a/source/Groups/ConfigurationMenuHandler.ts +++ b/source/Groups/ConfigurationMenuHandler.ts @@ -209,10 +209,12 @@ export class ConfigurationMenuHandler { private getStringBuilder(context: FieldMenuItemContext): TextInputBuilder { return new TextInputBuilder() .setStyle(TextInputStyle.Short) + .setMaxLength(100) } private getTextareaBuilder(context: FieldMenuItemContext): TextInputBuilder { return new TextInputBuilder() .setStyle(TextInputStyle.Paragraph) + .setMaxLength(2048) }