/[sudobot]/trunk/src/services/ChannelLockManager.ts
ViewVC logotype

Diff of /trunk/src/services/ChannelLockManager.ts

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 241 by rakin, Mon Jul 29 17:29:10 2024 UTC revision 242 by rakin, Mon Jul 29 17:29:10 2024 UTC
# Line 1  Line 1 
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";
# Line 7  export interface ChannelLockOptions { Line 7  export interface ChannelLockOptions {
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    
# Line 22  export default class ChannelLockManager Line 26  export default class ChannelLockManager
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 = {
# Line 37  export default class ChannelLockManager Line 41  export default class ChannelLockManager
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,
# Line 71  export default class ChannelLockManager Line 76  export default class ChannelLockManager
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) {
# Line 101  export default class ChannelLockManager Line 113  export default class ChannelLockManager
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'),

Legend:
Removed from v.241  
changed lines
  Added in v.242

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26