TempVC permissions fixes.
This commit is contained in:
parent
10d8a0b900
commit
7b6550e665
@ -224,7 +224,8 @@ export const commands = [
|
|||||||
await interaction.reply({ content: `Channel renamed to **${name}**.`, flags: MessageFlags.Ephemeral });
|
await interaction.reply({ content: `Channel renamed to **${name}**.`, flags: MessageFlags.Ephemeral });
|
||||||
} else if (sub === 'invite') {
|
} else if (sub === 'invite') {
|
||||||
const u = interaction.options.getUser('user', true);
|
const u = interaction.options.getUser('user', true);
|
||||||
await voice.permissionOverwrites.edit(u.id, { Connect: true });
|
// grant view and connect
|
||||||
|
await voice.permissionOverwrites.edit(u.id, { ViewChannel: true, Connect: true });
|
||||||
await interaction.reply({ content: `Invited <@${u.id}>.`, flags: MessageFlags.Ephemeral });
|
await interaction.reply({ content: `Invited <@${u.id}>.`, flags: MessageFlags.Ephemeral });
|
||||||
} else if (sub === 'kick') {
|
} else if (sub === 'kick') {
|
||||||
const u = interaction.options.getUser('user', true);
|
const u = interaction.options.getUser('user', true);
|
||||||
@ -335,10 +336,19 @@ export const commands = [
|
|||||||
const defaultName = `TempVC: ${display}`;
|
const defaultName = `TempVC: ${display}`;
|
||||||
await voice.setName(defaultName);
|
await voice.setName(defaultName);
|
||||||
await voice.setUserLimit(0);
|
await voice.setUserLimit(0);
|
||||||
// clear all overwrites except owner, default allow @everyone
|
// clear all overwrites: allow everyone, owner elevated perms
|
||||||
await voice.permissionOverwrites.set([
|
await voice.permissionOverwrites.set([
|
||||||
{ id: guild.roles.everyone.id, allow: [PermissionFlagsBits.Connect] },
|
{ id: guild.roles.everyone.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.Connect] },
|
||||||
{ id: sess.ownerId, allow: [PermissionFlagsBits.Connect, PermissionFlagsBits.MoveMembers, PermissionFlagsBits.ManageChannels] }
|
{ id: sess.ownerId, allow: [
|
||||||
|
PermissionFlagsBits.ViewChannel,
|
||||||
|
PermissionFlagsBits.Connect,
|
||||||
|
PermissionFlagsBits.MoveMembers,
|
||||||
|
PermissionFlagsBits.ManageChannels,
|
||||||
|
PermissionFlagsBits.PrioritySpeaker,
|
||||||
|
PermissionFlagsBits.MuteMembers,
|
||||||
|
PermissionFlagsBits.DeafenMembers
|
||||||
|
]
|
||||||
|
}
|
||||||
]);
|
]);
|
||||||
sess.roleId = guild.roles.everyone.id;
|
sess.roleId = guild.roles.everyone.id;
|
||||||
await client.pb.updateOne('tempvc_sessions', sess.pbId, { roleId: guild.roles.everyone.id, invitedUserIds: [] });
|
await client.pb.updateOne('tempvc_sessions', sess.pbId, { roleId: guild.roles.everyone.id, invitedUserIds: [] });
|
||||||
@ -348,13 +358,13 @@ export const commands = [
|
|||||||
sess.mode = mode;
|
sess.mode = mode;
|
||||||
// apply mode overwrites
|
// apply mode overwrites
|
||||||
if (mode === 'whitelist') {
|
if (mode === 'whitelist') {
|
||||||
// only allow whitelisted role + owner + invites
|
// only allow whitelisted role
|
||||||
await voice.permissionOverwrites.edit(guild.roles.everyone.id, { Connect: false });
|
await voice.permissionOverwrites.edit(guild.roles.everyone.id, { ViewChannel: false });
|
||||||
if (sess.roleId) await voice.permissionOverwrites.edit(sess.roleId, { Connect: true });
|
if (sess.roleId) await voice.permissionOverwrites.edit(sess.roleId, { ViewChannel: true });
|
||||||
} else {
|
} else {
|
||||||
// blacklist: allow everyone, then deny the specified role
|
// blacklist: allow everyone, then deny the specified role
|
||||||
await voice.permissionOverwrites.edit(guild.roles.everyone.id, { Connect: true });
|
await voice.permissionOverwrites.edit(guild.roles.everyone.id, { ViewChannel: true });
|
||||||
if (sess.roleId) await voice.permissionOverwrites.edit(sess.roleId, { Connect: false });
|
if (sess.roleId) await voice.permissionOverwrites.edit(sess.roleId, { ViewChannel: false });
|
||||||
}
|
}
|
||||||
// persist mode
|
// persist mode
|
||||||
await client.pb.updateOne('tempvc_sessions', sess.pbId, { mode });
|
await client.pb.updateOne('tempvc_sessions', sess.pbId, { mode });
|
||||||
@ -374,10 +384,17 @@ export const commands = [
|
|||||||
// apply mode-based permissions
|
// apply mode-based permissions
|
||||||
const mode = preset.mode || 'whitelist';
|
const mode = preset.mode || 'whitelist';
|
||||||
sess.mode = mode;
|
sess.mode = mode;
|
||||||
// clear existing overwrites for everyone and role
|
// adjust view/connect for @everyone
|
||||||
await voice.permissionOverwrites.edit(guild.roles.everyone.id, { Connect: mode === 'blacklist' });
|
await voice.permissionOverwrites.edit(
|
||||||
|
guild.roles.everyone.id,
|
||||||
|
{ ViewChannel: mode === 'blacklist', Connect: mode === 'blacklist' }
|
||||||
|
);
|
||||||
|
// adjust view/connect for role
|
||||||
if (preset.roleId) {
|
if (preset.roleId) {
|
||||||
await voice.permissionOverwrites.edit(preset.roleId, { Connect: mode === 'whitelist' ? true : false });
|
await voice.permissionOverwrites.edit(
|
||||||
|
preset.roleId,
|
||||||
|
{ ViewChannel: mode === 'whitelist', Connect: mode === 'whitelist' }
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// invite users explicitly
|
// invite users explicitly
|
||||||
for (const uid of preset.invitedUserIds || []) {
|
for (const uid of preset.invitedUserIds || []) {
|
||||||
@ -439,12 +456,23 @@ export async function init(client) {
|
|||||||
const name = `TempVC: ${displayName}`;
|
const name = `TempVC: ${displayName}`;
|
||||||
// create channel
|
// create channel
|
||||||
// create voice channel, default permissions inherited from category (allow everyone)
|
// create voice channel, default permissions inherited from category (allow everyone)
|
||||||
|
// create voice channel; default allow everyone view/join, owner elevated perms
|
||||||
const ch = await guild.channels.create({
|
const ch = await guild.channels.create({
|
||||||
name,
|
name,
|
||||||
type: ChannelType.GuildVoice,
|
type: ChannelType.GuildVoice,
|
||||||
parent: catId,
|
parent: catId,
|
||||||
permissionOverwrites: [
|
permissionOverwrites: [
|
||||||
{ id: owner.id, allow: [PermissionFlagsBits.Connect, PermissionFlagsBits.MoveMembers, PermissionFlagsBits.ManageChannels] }
|
{ id: guild.roles.everyone.id, allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.Connect] },
|
||||||
|
{ id: owner.id, allow: [
|
||||||
|
PermissionFlagsBits.ViewChannel,
|
||||||
|
PermissionFlagsBits.Connect,
|
||||||
|
PermissionFlagsBits.MoveMembers,
|
||||||
|
PermissionFlagsBits.ManageChannels,
|
||||||
|
PermissionFlagsBits.PrioritySpeaker,
|
||||||
|
PermissionFlagsBits.MuteMembers,
|
||||||
|
PermissionFlagsBits.DeafenMembers
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
// move member
|
// move member
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user