setCommunity mode

This commit is contained in:
March 7th 2022-04-08 12:02:46 +07:00
parent 3a96fe0f5d
commit 590a778c4a
2 changed files with 95 additions and 54 deletions

View File

@ -1174,60 +1174,60 @@ class Guild extends AnonymousGuild {
setRulesChannel(rulesChannel, reason) {
return this.edit({ rulesChannel }, reason);
}
/**
* Change Guild Position (from * to Folder or Home)
* @param {number} position Guild Position
* * **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.
* @param {String|Number} type Move to folder or home
* * `FOLDER`: 1
* * `HOME`: 2
* @param {String|Number|void|null} folderID If you want to move to folder
* @returns {Promise<Guild>}
* @example
* // Move guild to folderID 123456, index 1
* guild.setPosition(1, 'FOLDER', 123456)
* .then(guild => console.log(`Guild moved to folderID ${guild.folder.folderId}`));
*/
async setPosition(position, type, folderID) {
if (type == 1 || `${type}`.toUpperCase() === 'FOLDER') {
folderID = folderID || this.folder.folderId;
if (!['number', 'string'].includes(typeof folderID))
throw new TypeError(
'INVALID_TYPE',
'folderID',
'String | Number',
);
// Get Data from Folder ID
const folder = await this.client.setting.rawSetting.guild_folders.find(
(obj) => obj.id == folderID,
);
if (!folder) throw new Error('FOLDER_NOT_FOUND');
if (folder.guild_ids.length - 1 < position || position < 0)
throw new Error('FOLDER_POSITION_INVALID');
if (position !== folder.guild_ids.indexOf(this.id)) {
await this.client.setting.guildChangePosition(
this.id,
position,
1,
folderID,
);
}
} else if (type == 2 || `${type}`.toUpperCase() === 'HOME') {
if (this.client.setting.guild_positions - 1 < position || position < 0)
throw new Error('FOLDER_POSITION_INVALID');
if (position !== this.position) {
await this.client.setting.guildChangePosition(
this.id,
position,
2,
null,
);
}
} else {
throw new TypeError('INVALID_TYPE', 'type', '`Folder`| `Home`');
}
return this;
}
/**
* Change Guild Position (from * to Folder or Home)
* @param {number} position Guild Position
* * **WARNING**: Type = `FOLDER`, newPosition is the guild's index in the Folder.
* @param {String|Number} type Move to folder or home
* * `FOLDER`: 1
* * `HOME`: 2
* @param {String|Number|void|null} folderID If you want to move to folder
* @returns {Promise<Guild>}
* @example
* // Move guild to folderID 123456, index 1
* guild.setPosition(1, 'FOLDER', 123456)
* .then(guild => console.log(`Guild moved to folderID ${guild.folder.folderId}`));
*/
async setPosition(position, type, folderID) {
if (type == 1 || `${type}`.toUpperCase() === 'FOLDER') {
folderID = folderID || this.folder.folderId;
if (!['number', 'string'].includes(typeof folderID))
throw new TypeError(
'INVALID_TYPE',
'folderID',
'String | Number',
);
// Get Data from Folder ID
const folder = await this.client.setting.rawSetting.guild_folders.find(
(obj) => obj.id == folderID,
);
if (!folder) throw new Error('FOLDER_NOT_FOUND');
if (folder.guild_ids.length - 1 < position || position < 0)
throw new Error('FOLDER_POSITION_INVALID');
if (position !== folder.guild_ids.indexOf(this.id)) {
await this.client.setting.guildChangePosition(
this.id,
position,
1,
folderID,
);
}
} else if (type == 2 || `${type}`.toUpperCase() === 'HOME') {
if (this.client.setting.guild_positions - 1 < position || position < 0)
throw new Error('FOLDER_POSITION_INVALID');
if (position !== this.position) {
await this.client.setting.guildChangePosition(
this.id,
position,
2,
null,
);
}
} else {
throw new TypeError('INVALID_TYPE', 'type', '`Folder`| `Home`');
}
return this;
}
/**
* Edits the community updates channel of the guild.
@ -1412,6 +1412,46 @@ class Guild extends AnonymousGuild {
);
}
/**
* Set Community Feature
* @param {Boolean} stats True / False to enable / disable Community Feature
* @param {TextChannelResolvable} publicUpdatesChannel
* @param {TextChannelResolvable} rulesChannel
* @param {String} reason
*/
async setCommunity(stats = true, publicUpdatesChannel = '1', rulesChannel = '1', reason) {
if (stats) {
// Check everyone role
const everyoneRole = this.roles.everyone;
if (everyoneRole.mentionable) {
await everyoneRole.setMentionable(false, reason);
}
// Setting
this.edit(
{
defaultMessageNotifications: 'ONLY_MENTIONS',
explicitContentFilter: 'ALL_MEMBERS',
features: [...this.features, 'COMMUNITY'],
publicUpdatesChannel,
rulesChannel,
verificationLevel:
VerificationLevels[this.verificationLevel] < 1
? 'LOW'
: this.verificationLevel, // Email
},
reason,
);
} else {
this.edit({
publicUpdatesChannel: null,
rulesChannel: null,
features: this.features.filter(f => f !== 'COMMUNITY'),
preferredLocale: this.preferredLocale,
description: this.description,
}, reason);
}
}
toJSON() {
const json = super.toJSON({
available: false,

1
typings/index.d.ts vendored
View File

@ -1012,6 +1012,7 @@ export class Guild extends AnonymousGuild {
public setSystemChannelFlags(systemChannelFlags: SystemChannelFlagsResolvable, reason?: string): Promise<Guild>;
public setVerificationLevel(verificationLevel: VerificationLevel | number, reason?: string): Promise<Guild>;
public setPremiumProgressBarEnabled(enabled?: boolean, reason?: string): Promise<Guild>;
public setCommunity(stats: boolean, publicUpdatesChannel: TextChannelResolvable, rulesChannel: TextChannelResolvable, reason?: string): Promise<Guild>;
public setWidgetSettings(settings: GuildWidgetSettingsData, reason?: string): Promise<Guild>;
public toJSON(): unknown;
}