forked from Galactic/galactic-bot
proper perms checks for selfrole setting
This commit is contained in:
parent
e905d766f8
commit
861169f083
@ -1,4 +1,4 @@
|
||||
import { CommandError, Setting } from '../../../interfaces/index.js';
|
||||
import { Setting } from '../../../interfaces/index.js';
|
||||
import DiscordClient from '../../../DiscordClient.js';
|
||||
import InvokerWrapper from '../../wrappers/InvokerWrapper.js';
|
||||
import { CommandOptionType, CommandParams } from '../../../../../@types/Client.js';
|
||||
@ -9,7 +9,6 @@ import Emojis from '../../../../constants/Emojis.js';
|
||||
|
||||
class SelfroleSetting extends Setting
|
||||
{
|
||||
|
||||
constructor (client: DiscordClient)
|
||||
{
|
||||
super(client, {
|
||||
@ -77,8 +76,9 @@ class SelfroleSetting extends Setting
|
||||
// old channel for deleting old message if one exists
|
||||
const oldChannel = await guild.resolveChannel<TextChannel>(setting.channel);
|
||||
const newChannel = channel?.asChannel || oldChannel;
|
||||
if (!newChannel?.isTextBased())
|
||||
throw new CommandError(invoker, { index: 'ERR_INVALID_CHANNEL_TYPE' });
|
||||
if (newChannel && !newChannel.isTextBased())
|
||||
// throw new CommandError(invoker, { index: 'ERR_INVALID_CHANNEL_TYPE' });
|
||||
return { error: true, index: 'ERR_INVALID_CHANNEL_TYPE' };
|
||||
if (channel)
|
||||
setting.channel = channel.asChannel.id; // Set the new channel if one is given
|
||||
if (text)
|
||||
@ -95,11 +95,15 @@ class SelfroleSetting extends Setting
|
||||
}
|
||||
}
|
||||
|
||||
if (setting.roles.length && setting.channel && setting.roles.length <= 25)
|
||||
if (newChannel && setting.roles.length && setting.channel && setting.roles.length <= 25)
|
||||
{
|
||||
const perms = newChannel.permissionsFor(this.client.user!);
|
||||
const missing = perms?.missing([ 'SendMessages', 'ViewChannel' ]) ?? [];
|
||||
if (missing.length)
|
||||
return { error: true, index: 'ERR_CHANNEL_PERMS', params: { perms: missing.join('`, `'), channel: newChannel.name } };
|
||||
const resolvedRoles = await guild.resolveRoles(setting.roles);
|
||||
const selectMenu: StringSelectMenuComponentData = {
|
||||
type: ComponentType.SelectMenu,
|
||||
type: ComponentType.StringSelect,
|
||||
customId: 'selfrole-select',
|
||||
maxValues: resolvedRoles.length,
|
||||
options: resolvedRoles.map((r) =>
|
||||
@ -137,13 +141,10 @@ class SelfroleSetting extends Setting
|
||||
const msg = await newChannel.send(payload);
|
||||
setting.message = msg.id;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return { index: 'SETTING_SUCCESS_ALT' };
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default SelfroleSetting;
|
Loading…
Reference in New Issue
Block a user