1 |
import { GuildChannel, PermissionString, User } from "discord.js"; |
import { GuildChannel, PermissionString, Role, RoleResolvable, User } from "discord.js"; |
2 |
import MessageEmbed from "../client/MessageEmbed"; |
import MessageEmbed from "../client/MessageEmbed"; |
3 |
import ChannelLock from "../models/ChannelLock"; |
import ChannelLock from "../models/ChannelLock"; |
4 |
import Service from "../utils/structures/Service"; |
import Service from "../utils/structures/Service"; |
7 |
reason?: string; |
reason?: string; |
8 |
sendConfirmation?: boolean; |
sendConfirmation?: boolean; |
9 |
force?: boolean; |
force?: boolean; |
10 |
|
role?: RoleResolvable; |
11 |
} |
} |
12 |
|
|
13 |
export default class ChannelLockManager extends Service { |
export default class ChannelLockManager extends Service { |
14 |
async lock(channel: GuildChannel, user: User, { reason, sendConfirmation }: ChannelLockOptions = {}) { |
async lock(channel: GuildChannel, user: User, { reason, sendConfirmation, role }: ChannelLockOptions = {}) { |
15 |
|
const lockRole = role ? (role instanceof Role ? role.id : role) : channel.guild.id; |
16 |
|
|
17 |
const channelLock = await ChannelLock.findOne({ |
const channelLock = await ChannelLock.findOne({ |
18 |
where: { |
where: { |
19 |
channel_id: channel.id, |
channel_id: channel.id, |
20 |
guild_id: channel.guild.id |
guild_id: channel.guild.id, |
21 |
|
role_id: lockRole |
22 |
} |
} |
23 |
}); |
}); |
24 |
|
|
26 |
return false; |
return false; |
27 |
} |
} |
28 |
|
|
29 |
const permissions = channel.permissionOverwrites.cache.get(channel.guild.id); |
const permissions = channel.permissionOverwrites.cache.get(lockRole); |
30 |
|
|
31 |
if (permissions) { |
if (permissions) { |
32 |
const permJson = { |
const permJson = { |
41 |
guild_id: channel.guild.id, |
guild_id: channel.guild.id, |
42 |
channel_id: channel.id, |
channel_id: channel.id, |
43 |
reason, |
reason, |
44 |
previous_perms: permJson |
previous_perms: permJson, |
45 |
|
role_id: lockRole |
46 |
}); |
}); |
47 |
} |
} |
48 |
|
|
49 |
await channel.permissionOverwrites.edit(channel.guild.id, { |
await channel.permissionOverwrites.edit(lockRole, { |
50 |
SEND_MESSAGES: false, |
SEND_MESSAGES: false, |
51 |
SEND_MESSAGES_IN_THREADS: false, |
SEND_MESSAGES_IN_THREADS: false, |
52 |
ADD_REACTIONS: false, |
ADD_REACTIONS: false, |
76 |
return true; |
return true; |
77 |
} |
} |
78 |
|
|
79 |
async unlock(channel: GuildChannel, { reason, sendConfirmation, force }: ChannelLockOptions = {}) { |
async unlock(channel: GuildChannel, { reason, sendConfirmation, force, role }: ChannelLockOptions = {}) { |
80 |
|
const lockRole = role ? (role instanceof Role ? role.id : role) : channel.guild.id; |
81 |
|
|
82 |
const channelLock = await ChannelLock.findOne({ |
const channelLock = await ChannelLock.findOne({ |
83 |
where: { |
where: { |
84 |
channel_id: channel.id, |
channel_id: channel.id, |
85 |
guild_id: channel.guild.id |
guild_id: channel.guild.id, |
86 |
|
role_id: lockRole |
87 |
} |
} |
88 |
}); |
}); |
89 |
|
|
90 |
|
if (!channelLock) { |
91 |
|
return false; |
92 |
|
} |
93 |
|
|
94 |
const permissions = channelLock?.get('previous_perms') as { allow: PermissionString[], deny: PermissionString[] }; |
const permissions = channelLock?.get('previous_perms') as { allow: PermissionString[], deny: PermissionString[] }; |
95 |
|
|
96 |
if (!permissions && !force) { |
if (!permissions && !force) { |
113 |
} |
} |
114 |
}; |
}; |
115 |
|
|
116 |
await channel.permissionOverwrites.edit(channel.guild.id, { |
await channel.permissionOverwrites.edit(lockRole, { |
117 |
SEND_MESSAGES: transform('SEND_MESSAGES'), |
SEND_MESSAGES: transform('SEND_MESSAGES'), |
118 |
SEND_MESSAGES_IN_THREADS: transform('SEND_MESSAGES_IN_THREADS'), |
SEND_MESSAGES_IN_THREADS: transform('SEND_MESSAGES_IN_THREADS'), |
119 |
ADD_REACTIONS: transform('ADD_REACTIONS'), |
ADD_REACTIONS: transform('ADD_REACTIONS'), |