Add guild edit feature, fix some types
This commit is contained in:
		
							parent
							
								
									7e11b8a351
								
							
						
					
					
						commit
						19e2020e38
					
				
					 3 changed files with 123 additions and 7 deletions
				
			
		|  | @ -12,7 +12,9 @@ import { | |||
|   GuildCreateChannelOptions, | ||||
|   GuildCreateChannelPayload, | ||||
|   GuildPreview, | ||||
|   GuildPreviewPayload | ||||
|   GuildPreviewPayload, | ||||
|   GuildModifyOptions, | ||||
|   GuildModifyPayload | ||||
| } from '../types/guild.ts' | ||||
| import { BaseManager } from './base.ts' | ||||
| import { MembersManager } from './members.ts' | ||||
|  | @ -133,4 +135,74 @@ export class GuildManager extends BaseManager<GuildPayload, Guild> { | |||
| 
 | ||||
|     return result | ||||
|   } | ||||
| 
 | ||||
|   async edit( | ||||
|     guildID: string, | ||||
|     options: GuildModifyOptions, | ||||
|     asRaw: false | ||||
|   ): Promise<Guild> | ||||
|   async edit( | ||||
|     guildID: string, | ||||
|     options: GuildModifyOptions, | ||||
|     asRaw: true | ||||
|   ): Promise<GuildPayload> | ||||
|   async edit( | ||||
|     guildID: string, | ||||
|     options: GuildModifyOptions, | ||||
|     asRaw: boolean = false | ||||
|   ): Promise<Guild | GuildPayload> { | ||||
|     if ( | ||||
|       options.icon !== undefined && | ||||
|       options.icon !== null && | ||||
|       // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
 | ||||
|       !options.icon.startsWith('data:') | ||||
|     ) { | ||||
|       options.icon = await fetchAuto(options.icon) | ||||
|     } | ||||
|     if ( | ||||
|       options.splash !== undefined && | ||||
|       options.splash !== null && | ||||
|       // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
 | ||||
|       !options.splash.startsWith('data:') | ||||
|     ) { | ||||
|       options.splash = await fetchAuto(options.splash) | ||||
|     } | ||||
|     if ( | ||||
|       options.banner !== undefined && | ||||
|       options.banner !== null && | ||||
|       // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
 | ||||
|       !options.banner.startsWith('data:') | ||||
|     ) { | ||||
|       options.banner = await fetchAuto(options.banner) | ||||
|     } | ||||
| 
 | ||||
|     const body: GuildModifyPayload = { | ||||
|       name: options.name, | ||||
|       region: options.region, | ||||
|       verification_level: options.verificationLevel, | ||||
|       default_message_notifications: options.defaultMessageNotifications, | ||||
|       explicit_content_filter: options.explicitContentFilter, | ||||
|       afk_channel_id: options.afkChannelID, | ||||
|       afk_timeout: options.afkTimeout, | ||||
|       icon: options.icon, | ||||
|       splash: options.splash, | ||||
|       banner: options.banner, | ||||
|       system_channel_id: options.systemChannelID, | ||||
|       rules_channel_id: options.rulesChannelID, | ||||
|       public_updates_channel_id: options.publicUpdatesChannelID, | ||||
|       preferred_locale: options.preferredLocale | ||||
|     } | ||||
| 
 | ||||
|     const result: GuildPayload = await this.client.rest.patch( | ||||
|       GUILD(guildID), | ||||
|       body | ||||
|     ) | ||||
| 
 | ||||
|     if (asRaw) { | ||||
|       const guild = new Guild(this.client, result) | ||||
|       return guild | ||||
|     } else { | ||||
|       return result | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -8,7 +8,10 @@ import { | |||
|   IntegrationExpireBehavior, | ||||
|   Verification, | ||||
|   GuildChannels, | ||||
|   GuildPreview | ||||
|   GuildPreview, | ||||
|   MessageNotification, | ||||
|   ContentFilter, | ||||
|   GuildModifyOptions | ||||
| } from '../types/guild.ts' | ||||
| import { Base } from './base.ts' | ||||
| import { CreateGuildRoleOptions, RolesManager } from '../managers/roles.ts' | ||||
|  | @ -134,8 +137,8 @@ export class Guild extends Base { | |||
|   widgetEnabled?: boolean | ||||
|   widgetChannelID?: string | ||||
|   verificationLevel?: Verification | ||||
|   defaultMessageNotifications?: number | ||||
|   explicitContentFilter?: number | ||||
|   defaultMessageNotifications?: MessageNotification | ||||
|   explicitContentFilter?: ContentFilter | ||||
|   roles: RolesManager | ||||
|   emojis: GuildEmojisManager | ||||
|   invites: InviteManager | ||||
|  | @ -332,6 +335,13 @@ export class Guild extends Base { | |||
|   async preview(): Promise<GuildPreview> { | ||||
|     return this.client.guilds.preview(this.id) | ||||
|   } | ||||
| 
 | ||||
|   async edit(options: GuildModifyOptions): Promise<Guild> { | ||||
|     const result = await this.client.guilds.edit(this.id, options, true) | ||||
|     this.readFromData(result) | ||||
| 
 | ||||
|     return new Guild(this.client, result) | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export class GuildIntegration extends Base { | ||||
|  |  | |||
|  | @ -32,8 +32,8 @@ export interface GuildPayload { | |||
|   widget_enabled?: boolean | ||||
|   widget_channel_id?: string | ||||
|   verification_level: Verification | ||||
|   default_message_notifications: number | ||||
|   explicit_content_filter: number | ||||
|   default_message_notifications: MessageNotification | ||||
|   explicit_content_filter: ContentFilter | ||||
|   roles: RolePayload[] | ||||
|   emojis: EmojiPayload[] | ||||
|   features: GuildFeatures[] | ||||
|  | @ -83,7 +83,7 @@ export enum MessageNotification { | |||
| export enum ContentFilter { | ||||
|   DISABLED = 0, | ||||
|   MEMBERS_WITHOUT_ROLES = 1, | ||||
|   ALL_MEMBERS = 3 | ||||
|   ALL_MEMBERS = 2 | ||||
| } | ||||
| 
 | ||||
| export enum MFA { | ||||
|  | @ -231,3 +231,37 @@ export interface GuildPreview { | |||
|   approximatePresenceCount: number | ||||
|   description: string | null | ||||
| } | ||||
| 
 | ||||
| export interface GuildModifyPayload { | ||||
|   name?: string | ||||
|   region?: string | null | ||||
|   verification_level?: Verification | null | ||||
|   default_message_notifications?: MessageNotification | null | ||||
|   explicit_content_filter?: ContentFilter | null | ||||
|   afk_channel_id?: string | null | ||||
|   afk_timeout?: number | ||||
|   icon?: string | null | ||||
|   splash?: string | null | ||||
|   banner?: string | null | ||||
|   system_channel_id?: string | null | ||||
|   rules_channel_id?: string | null | ||||
|   public_updates_channel_id?: string | null | ||||
|   preferred_locale?: string | null | ||||
| } | ||||
| 
 | ||||
| export interface GuildModifyOptions { | ||||
|   name?: string | ||||
|   region?: string | null | ||||
|   verificationLevel?: Verification | null | ||||
|   defaultMessageNotifications?: MessageNotification | null | ||||
|   explicitContentFilter?: ContentFilter | null | ||||
|   afkChannelID?: string | null | ||||
|   afkTimeout?: number | ||||
|   icon?: string | null | ||||
|   splash?: string | null | ||||
|   banner?: string | null | ||||
|   systemChannelID?: string | null | ||||
|   rulesChannelID?: string | null | ||||
|   publicUpdatesChannelID?: string | null | ||||
|   preferredLocale?: string | null | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue