diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 305dffb54..3bddbce89 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -37,7 +37,7 @@ model ArchivedMessage { model ArchivedRole { archivedUsers ArchivedUser[] - colour String @default("5865F2") @db.Char(6) // 7289DA + colour String @default("5865F2") @db.Char(6) // 7289DA createdAt DateTime @default(now()) name String roleId String @db.VarChar(19) @@ -69,6 +69,7 @@ model ArchivedUser { } model Category { + blockedRoles Json @default("[]") channelName String claiming Boolean @default(false) createdAt DateTime @default(now()) diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index 7e7841baf..14f7d80da 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -36,7 +36,7 @@ model ArchivedMessage { model ArchivedRole { archivedUsers ArchivedUser[] - colour String @default("5865F2") @db.Char(6) // 7289DA + colour String @default("5865F2") @db.Char(6) // 7289DA createdAt DateTime @default(now()) name String roleId String @db.VarChar(19) @@ -68,6 +68,7 @@ model ArchivedUser { } model Category { + blockedRoles Json @default("[]") channelName String claiming Boolean @default(false) createdAt DateTime @default(now()) diff --git a/db/sqlite/schema.prisma b/db/sqlite/schema.prisma index e6458ceb2..9dddfdfe5 100644 --- a/db/sqlite/schema.prisma +++ b/db/sqlite/schema.prisma @@ -68,6 +68,7 @@ model ArchivedUser { } model Category { + blockedRoles String @default("[]") channelName String claiming Boolean @default(false) createdAt DateTime @default(now()) diff --git a/src/lib/middleware/prisma-sqlite.js b/src/lib/middleware/prisma-sqlite.js index d858a4c92..7a2e7ea7d 100644 --- a/src/lib/middleware/prisma-sqlite.js +++ b/src/lib/middleware/prisma-sqlite.js @@ -1,6 +1,7 @@ const jsonFields = [ 'pingRoles', 'requiredRoles', + 'blockedRoles', 'staffRoles', 'autoTag', 'blocklist', diff --git a/src/lib/tickets/manager.js b/src/lib/tickets/manager.js index faabe359d..dd1ab6644 100644 --- a/src/lib/tickets/manager.js +++ b/src/lib/tickets/manager.js @@ -227,6 +227,11 @@ module.exports = class TicketManager { if (blocked) return await sendError('blocked'); } + if (category.blockedRoles.length !== 0) { + const blocked = category.blockedRoles.some(r => member.roles.cache.has(r)); + if (blocked) return await sendError('blocked'); + } + if (category.requiredRoles.length !== 0) { const missing = category.requiredRoles.some(r => !member.roles.cache.has(r)); if (missing) return await sendError('missing_roles'); diff --git a/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js b/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js index 7cb8bfe3e..d6c8a8a74 100644 --- a/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js +++ b/src/routes/api/admin/guilds/[guild]/categories/[category]/index.js @@ -76,6 +76,7 @@ module.exports.patch = fastify => ({ const data = req.body; const select = { + blockedRoles: true, channelName: true, claiming: true, // createdAt: true, diff --git a/src/routes/api/admin/guilds/[guild]/categories/index.js b/src/routes/api/admin/guilds/[guild]/categories/index.js index d8da7d730..f2ff0b1d2 100644 --- a/src/routes/api/admin/guilds/[guild]/categories/index.js +++ b/src/routes/api/admin/guilds/[guild]/categories/index.js @@ -20,6 +20,7 @@ module.exports.get = fastify => ({ select: { categories: { select: { + blockedRoles: true, createdAt: true, description: true, discordCategory: true,