TempVC permissions fixes.

This commit is contained in:
jrmyr 2025-05-04 18:41:46 +00:00
parent 10d8a0b900
commit 7b6550e665

View File

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