mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-20 21:43:33 +01:00
feat(Guild): backport misc properties and setRolePositions (#3337)
* feat(Guild): backport misc properties and setRolePositions PRs: * #3168 * #3317 * typings
This commit is contained in:
@@ -499,6 +499,10 @@ class RESTMethods {
|
|||||||
.then(data => this.client.actions.GuildMemberGet.handle(guild, data).member);
|
.then(data => this.client.actions.GuildMemberGet.handle(guild, data).member);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getGuild(guild) {
|
||||||
|
return this.rest.makeRequest('get', Endpoints.Guild(guild), true);
|
||||||
|
}
|
||||||
|
|
||||||
getGuildMember(guild, userID, cache) {
|
getGuildMember(guild, userID, cache) {
|
||||||
return this.rest.makeRequest('get', Endpoints.Guild(guild).Member(userID), true).then(data => {
|
return this.rest.makeRequest('get', Endpoints.Guild(guild).Member(userID), true).then(data => {
|
||||||
if (cache) return this.client.actions.GuildMemberGet.handle(guild, data).member;
|
if (cache) return this.client.actions.GuildMemberGet.handle(guild, data).member;
|
||||||
@@ -886,23 +890,6 @@ class RESTMethods {
|
|||||||
.then(() => user);
|
.then(() => user);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateChannelPositions(guildID, channels) {
|
|
||||||
const data = new Array(channels.length);
|
|
||||||
for (let i = 0; i < channels.length; i++) {
|
|
||||||
data[i] = {
|
|
||||||
id: this.client.resolver.resolveChannelID(channels[i].channel),
|
|
||||||
position: channels[i].position,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.rest.makeRequest('patch', Endpoints.Guild(guildID).channels, true, data).then(() =>
|
|
||||||
this.client.actions.GuildChannelsPositionUpdate.handle({
|
|
||||||
guild_id: guildID,
|
|
||||||
channels,
|
|
||||||
}).guild
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateEmbed(guildID, embed, reason) {
|
updateEmbed(guildID, embed, reason) {
|
||||||
return this.rest.makeRequest('patch', Endpoints.Guild(guildID).embed, true, {
|
return this.rest.makeRequest('patch', Endpoints.Guild(guildID).embed, true, {
|
||||||
enabled: embed.enabled,
|
enabled: embed.enabled,
|
||||||
|
|||||||
@@ -184,6 +184,61 @@ class Guild {
|
|||||||
this.defaultMessageNotifications = Constants.DefaultMessageNotifications[data.default_message_notifications] ||
|
this.defaultMessageNotifications = Constants.DefaultMessageNotifications[data.default_message_notifications] ||
|
||||||
data.default_message_notifications;
|
data.default_message_notifications;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The hash of the guild banner
|
||||||
|
* @type {?string}
|
||||||
|
*/
|
||||||
|
this.banner = data.banner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The description of the guild, if any
|
||||||
|
* @type {?string}
|
||||||
|
*/
|
||||||
|
this.description = data.description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The embed channel ID, if enabled
|
||||||
|
* @type {?string}
|
||||||
|
* @name Guild#embedChannelID
|
||||||
|
*/
|
||||||
|
if (typeof data.embed_channel_id !== 'undefined') this.embedChannelID = data.embed_channel_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum amount of members the guild can have
|
||||||
|
* <info>You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter</info>
|
||||||
|
* @type {?number}
|
||||||
|
* @name Guild#maximumMembers
|
||||||
|
*/
|
||||||
|
if (typeof data.max_members !== 'undefined') this.maximumMembers = data.max_members || 250000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum amount of presences the guild can have
|
||||||
|
* <info>You will need to fetch the guild using {@link Guild#fetch} if you want to receive this parameter</info>
|
||||||
|
* @type {?number}
|
||||||
|
* @name Guild#maximumPresences
|
||||||
|
*/
|
||||||
|
if (typeof data.max_presences !== 'undefined') this.maximumPresences = data.max_presences || 5000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether widget images are enabled on this guild
|
||||||
|
* @type {?boolean}
|
||||||
|
* @name Guild#widgetEnabled
|
||||||
|
*/
|
||||||
|
if (typeof data.widget_enabled !== 'undefined') this.widgetEnabled = data.widget_enabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The widget channel ID, if enabled
|
||||||
|
* @type {?string}
|
||||||
|
* @name Guild#widgetChannelID
|
||||||
|
*/
|
||||||
|
if (typeof data.widget_channel_id !== 'undefined') this.widgetChannelID = data.widget_channel_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The vanity URL code of the guild, if any
|
||||||
|
* @type {?string}
|
||||||
|
*/
|
||||||
|
this.vanityURLCode = data.vanity_url_code;
|
||||||
|
|
||||||
this.id = data.id;
|
this.id = data.id;
|
||||||
this.available = !data.unavailable;
|
this.available = !data.unavailable;
|
||||||
this.features = data.features || this.features || [];
|
this.features = data.features || this.features || [];
|
||||||
@@ -272,6 +327,24 @@ class Guild {
|
|||||||
return new Date(this.createdTimestamp);
|
return new Date(this.createdTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Embed channel for this guild
|
||||||
|
* @type {?TextChannel}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get embedChannel() {
|
||||||
|
return this.channels.get(this.embedChannelID) || null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Widget channel for this guild
|
||||||
|
* @type {?TextChannel}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get widgetChannel() {
|
||||||
|
return this.channels.get(this.widgetChannelID) || null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time the client user joined the guild
|
* The time the client user joined the guild
|
||||||
* @type {Date}
|
* @type {Date}
|
||||||
@@ -300,6 +373,16 @@ class Guild {
|
|||||||
return Constants.Endpoints.Guild(this).Icon(this.client.options.http.cdn, this.icon);
|
return Constants.Endpoints.Guild(this).Icon(this.client.options.http.cdn, this.icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The URL to this guild's banner.
|
||||||
|
* @type {?string}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get bannerURL() {
|
||||||
|
if (!this.banner) return null;
|
||||||
|
return Constants.Endpoints.Guild(this).Banner(this.client.options.http.cdn, this.banner);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The acronym that shows up in place of a guild icon.
|
* The acronym that shows up in place of a guild icon.
|
||||||
* @type {string}
|
* @type {string}
|
||||||
@@ -473,6 +556,18 @@ class Guild {
|
|||||||
return this.client.resolver.resolveGuildMember(this, user);
|
return this.client.resolver.resolveGuildMember(this, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches this guild.
|
||||||
|
* @returns {Promise<Guild>}
|
||||||
|
*/
|
||||||
|
fetch() {
|
||||||
|
return this.client.rest.methods.getGuild(this).then(data => {
|
||||||
|
this.setup(data);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An object containing information about a guild member's ban.
|
* An object containing information about a guild member's ban.
|
||||||
* @typedef {Object} BanInfo
|
* @typedef {Object} BanInfo
|
||||||
@@ -1115,7 +1210,25 @@ class Guild {
|
|||||||
* .catch(console.error);
|
* .catch(console.error);
|
||||||
*/
|
*/
|
||||||
setChannelPositions(channelPositions) {
|
setChannelPositions(channelPositions) {
|
||||||
return this.client.rest.methods.updateChannelPositions(this.id, channelPositions);
|
channelPositions = channelPositions.map(({ channel, position }) => ({ id: channel.id || channel, position }));
|
||||||
|
return this.client.rest.methods.setChannelPositions(this.id, channelPositions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data needed for updating a role's position.
|
||||||
|
* @typedef {Object} RolePosition
|
||||||
|
* @property {RoleResolvable} role Role to update
|
||||||
|
* @property {number} position New position for the role
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Batch-updates the guild's role's positions.
|
||||||
|
* @param {RolePosition[]} rolePositions Role positions to update
|
||||||
|
* @returns {Promise<Guild>}
|
||||||
|
*/
|
||||||
|
setRolePositions(rolePositions) {
|
||||||
|
rolePositions = rolePositions.map(({ role, position }) => ({ id: role.id || role, position }));
|
||||||
|
return this.client.rest.methods.setRolePositions(this.id, rolePositions);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1396,7 +1509,7 @@ class Guild {
|
|||||||
|
|
||||||
Util.moveElementInArray(updatedChannels, channel, position, relative);
|
Util.moveElementInArray(updatedChannels, channel, position, relative);
|
||||||
|
|
||||||
updatedChannels = updatedChannels.map((r, i) => ({ id: r.id, position: i }));
|
updatedChannels = updatedChannels.map((c, i) => ({ id: c.id, position: i }));
|
||||||
return this.client.rest.methods.setChannelPositions(this.id, updatedChannels);
|
return this.client.rest.methods.setChannelPositions(this.id, updatedChannels);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -152,6 +152,7 @@ const Endpoints = exports.Endpoints = {
|
|||||||
auditLogs: `${base}/audit-logs`,
|
auditLogs: `${base}/audit-logs`,
|
||||||
Emoji: emojiID => `${base}/emojis/${emojiID}`,
|
Emoji: emojiID => `${base}/emojis/${emojiID}`,
|
||||||
Icon: (root, hash) => Endpoints.CDN(root).Icon(guildID, hash),
|
Icon: (root, hash) => Endpoints.CDN(root).Icon(guildID, hash),
|
||||||
|
Banner: (root, hash) => Endpoints.CDN(root).Banner(guildID, hash),
|
||||||
Splash: (root, hash) => Endpoints.CDN(root).Splash(guildID, hash),
|
Splash: (root, hash) => Endpoints.CDN(root).Splash(guildID, hash),
|
||||||
Role: roleID => `${base}/roles/${roleID}`,
|
Role: roleID => `${base}/roles/${roleID}`,
|
||||||
Member: memberID => {
|
Member: memberID => {
|
||||||
@@ -210,6 +211,7 @@ const Endpoints = exports.Endpoints = {
|
|||||||
Asset: name => `${root}/assets/${name}`,
|
Asset: name => `${root}/assets/${name}`,
|
||||||
Avatar: (userID, hash) => `${root}/avatars/${userID}/${hash}.${hash.startsWith('a_') ? 'gif' : 'png?size=2048'}`,
|
Avatar: (userID, hash) => `${root}/avatars/${userID}/${hash}.${hash.startsWith('a_') ? 'gif' : 'png?size=2048'}`,
|
||||||
Icon: (guildID, hash) => `${root}/icons/${guildID}/${hash}.jpg`,
|
Icon: (guildID, hash) => `${root}/icons/${guildID}/${hash}.jpg`,
|
||||||
|
Banner: (guildID, hash) => `${root}/banners/${guildID}/${hash}.jpg`,
|
||||||
AppIcon: (clientID, hash) => `${root}/app-icons/${clientID}/${hash}.png`,
|
AppIcon: (clientID, hash) => `${root}/app-icons/${clientID}/${hash}.png`,
|
||||||
AppAsset: (clientID, hash) => `${root}/app-assets/${clientID}/${hash}.png`,
|
AppAsset: (clientID, hash) => `${root}/app-assets/${clientID}/${hash}.png`,
|
||||||
GDMIcon: (channelID, hash) => `${root}/channel-icons/${channelID}/${hash}.jpg?size=2048`,
|
GDMIcon: (channelID, hash) => `${root}/channel-icons/${channelID}/${hash}.jpg?size=2048`,
|
||||||
|
|||||||
18
typings/index.d.ts
vendored
18
typings/index.d.ts
vendored
@@ -482,6 +482,9 @@ declare module 'discord.js' {
|
|||||||
public afkTimeout: number;
|
public afkTimeout: number;
|
||||||
public applicationID: string;
|
public applicationID: string;
|
||||||
public available: boolean;
|
public available: boolean;
|
||||||
|
public banner: string | null;
|
||||||
|
public readonly bannerURL: string | null;
|
||||||
|
public description: string | null;
|
||||||
public channels: Collection<Snowflake, GuildChannel>;
|
public channels: Collection<Snowflake, GuildChannel>;
|
||||||
public defaultMessageNotifications: DefaultMessageNotifications | number;
|
public defaultMessageNotifications: DefaultMessageNotifications | number;
|
||||||
public readonly client: Client;
|
public readonly client: Client;
|
||||||
@@ -489,6 +492,8 @@ declare module 'discord.js' {
|
|||||||
public readonly createdTimestamp: number;
|
public readonly createdTimestamp: number;
|
||||||
public readonly defaultChannel: TextChannel;
|
public readonly defaultChannel: TextChannel;
|
||||||
public readonly defaultRole: Role;
|
public readonly defaultRole: Role;
|
||||||
|
public readonly embedChannel: TextChannel | null;
|
||||||
|
public embedChannelID: Snowflake | null;
|
||||||
public embedEnabled: boolean;
|
public embedEnabled: boolean;
|
||||||
public emojis: Collection<Snowflake, Emoji>;
|
public emojis: Collection<Snowflake, Emoji>;
|
||||||
public explicitContentFilter: number;
|
public explicitContentFilter: number;
|
||||||
@@ -499,6 +504,8 @@ declare module 'discord.js' {
|
|||||||
public readonly joinedAt: Date;
|
public readonly joinedAt: Date;
|
||||||
public joinedTimestamp: number;
|
public joinedTimestamp: number;
|
||||||
public large: boolean;
|
public large: boolean;
|
||||||
|
public maximumMembers?: number;
|
||||||
|
public maximumPresences?: number;
|
||||||
public readonly me: GuildMember;
|
public readonly me: GuildMember;
|
||||||
public memberCount: number;
|
public memberCount: number;
|
||||||
public members: Collection<Snowflake, GuildMember>;
|
public members: Collection<Snowflake, GuildMember>;
|
||||||
@@ -518,9 +525,13 @@ declare module 'discord.js' {
|
|||||||
public readonly suppressEveryone: boolean;
|
public readonly suppressEveryone: boolean;
|
||||||
public readonly systemChannel: GuildChannel;
|
public readonly systemChannel: GuildChannel;
|
||||||
public systemChannelID: Snowflake;
|
public systemChannelID: Snowflake;
|
||||||
|
public vanityURLCode: string;
|
||||||
public readonly verified: boolean;
|
public readonly verified: boolean;
|
||||||
public verificationLevel: number;
|
public verificationLevel: number;
|
||||||
public readonly voiceConnection: VoiceConnection;
|
public readonly voiceConnection: VoiceConnection;
|
||||||
|
public readonly widgetChannel: TextChannel | null;
|
||||||
|
public widgetChannelID?: Snowflake;
|
||||||
|
public widgetEnabled?: boolean;
|
||||||
public acknowledge(): Promise<Guild>;
|
public acknowledge(): Promise<Guild>;
|
||||||
public addMember(user: UserResolvable, options: AddGuildMemberOptions): Promise<GuildMember>;
|
public addMember(user: UserResolvable, options: AddGuildMemberOptions): Promise<GuildMember>;
|
||||||
public allowDMs(allow: boolean): Promise<Guild>;
|
public allowDMs(allow: boolean): Promise<Guild>;
|
||||||
@@ -533,6 +544,7 @@ declare module 'discord.js' {
|
|||||||
public deleteEmoji(emoji: Emoji | string, reason?: string): Promise<void>;
|
public deleteEmoji(emoji: Emoji | string, reason?: string): Promise<void>;
|
||||||
public edit(data: GuildEditData, reason?: string): Promise<Guild>;
|
public edit(data: GuildEditData, reason?: string): Promise<Guild>;
|
||||||
public equals(guild: Guild): boolean;
|
public equals(guild: Guild): boolean;
|
||||||
|
public fetch(): Promise<Guild>;
|
||||||
public fetchAuditLogs(options?: GuildAuditLogsFetchOptions): Promise<GuildAuditLogs>;
|
public fetchAuditLogs(options?: GuildAuditLogsFetchOptions): Promise<GuildAuditLogs>;
|
||||||
public fetchBan(user: UserResolvable): Promise<BanInfo>;
|
public fetchBan(user: UserResolvable): Promise<BanInfo>;
|
||||||
public fetchBans(withReasons?: false): Promise<Collection<Snowflake, User>>;
|
public fetchBans(withReasons?: false): Promise<Collection<Snowflake, User>>;
|
||||||
@@ -562,6 +574,7 @@ declare module 'discord.js' {
|
|||||||
public setPosition(position: number, relative?: boolean): Promise<Guild>;
|
public setPosition(position: number, relative?: boolean): Promise<Guild>;
|
||||||
public setRegion(region: string, reason?: string): Promise<Guild>;
|
public setRegion(region: string, reason?: string): Promise<Guild>;
|
||||||
public setRolePosition(role: string | Role, position: number, relative?: boolean): Promise<Guild>;
|
public setRolePosition(role: string | Role, position: number, relative?: boolean): Promise<Guild>;
|
||||||
|
public setRolePositions(rolePositions: RolePosition[]): Promise<Guild>;
|
||||||
public setSplash(splash: Base64Resolvable, reason?: string): Promise<Guild>;
|
public setSplash(splash: Base64Resolvable, reason?: string): Promise<Guild>;
|
||||||
public setSystemChannel(systemChannel: ChannelResolvable, reason?: string): Promise<Guild>;
|
public setSystemChannel(systemChannel: ChannelResolvable, reason?: string): Promise<Guild>;
|
||||||
public setVerificationLevel(verificationLevel: number, reason?: string): Promise<Guild>;
|
public setVerificationLevel(verificationLevel: number, reason?: string): Promise<Guild>;
|
||||||
@@ -2103,6 +2116,11 @@ declare module 'discord.js' {
|
|||||||
mentionable?: boolean;
|
mentionable?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type RolePosition = {
|
||||||
|
role: RoleResolvable;
|
||||||
|
position: number;
|
||||||
|
};
|
||||||
|
|
||||||
type RoleResolvable = Role | string;
|
type RoleResolvable = Role | string;
|
||||||
|
|
||||||
type Snowflake = string;
|
type Snowflake = string;
|
||||||
|
|||||||
Reference in New Issue
Block a user