commit
						ce444630d0
					
				
					 3 changed files with 38 additions and 26 deletions
				
			
		|  | @ -24,6 +24,10 @@ export interface RequestHeaders { | ||||||
|   [name: string]: string |   [name: string]: string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export class DiscordAPIError extends Error { | ||||||
|  |   name = 'DiscordAPIError' | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export interface QueuedItem { | export interface QueuedItem { | ||||||
|   bucket?: string | null |   bucket?: string | null | ||||||
|   url: string |   url: string | ||||||
|  | @ -263,7 +267,7 @@ export class RESTManager { | ||||||
|     if (text === 'undefined') text = undefined |     if (text === 'undefined') text = undefined | ||||||
| 
 | 
 | ||||||
|     if (status === HttpResponseCode.Unauthorized) |     if (status === HttpResponseCode.Unauthorized) | ||||||
|       throw new Error(`Request was not successful (Unauthorized). Invalid Token.\n${text}`) |       throw new DiscordAPIError(`Request was not successful (Unauthorized). Invalid Token.\n${text}`) | ||||||
| 
 | 
 | ||||||
|     // At this point we know it is error
 |     // At this point we know it is error
 | ||||||
|     let error = { url: response.url, status, method: data.method, body: data.body } |     let error = { url: response.url, status, method: data.method, body: data.body } | ||||||
|  | @ -275,10 +279,10 @@ export class RESTManager { | ||||||
|       HttpResponseCode.Forbidden, |       HttpResponseCode.Forbidden, | ||||||
|       HttpResponseCode.MethodNotAllowed |       HttpResponseCode.MethodNotAllowed | ||||||
|     ].includes(status)) { |     ].includes(status)) { | ||||||
|       throw new Error(Deno.inspect(error)) |       throw new DiscordAPIError(Deno.inspect(error)) | ||||||
|     } else if (status === HttpResponseCode.GatewayUnavailable) { |     } else if (status === HttpResponseCode.GatewayUnavailable) { | ||||||
|       throw new Error(Deno.inspect(error)) |       throw new DiscordAPIError(Deno.inspect(error)) | ||||||
|     } else throw new Error('Request - Unknown Error') |     } else throw new DiscordAPIError('Request - Unknown Error') | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   async make( |   async make( | ||||||
|  | @ -327,8 +331,7 @@ export class RESTManager { | ||||||
|           if (response.status === 204) return resolve(undefined) |           if (response.status === 204) return resolve(undefined) | ||||||
| 
 | 
 | ||||||
|           const json: any = await response.json() |           const json: any = await response.json() | ||||||
|           // eslint-disable-next-line @typescript-eslint/no-floating-promises
 |           await this.handleStatusCode(response, json, requestData) | ||||||
|           this.handleStatusCode(response, json, requestData) |  | ||||||
| 
 | 
 | ||||||
|           if ( |           if ( | ||||||
|             json.retry_after !== undefined || |             json.retry_after !== undefined || | ||||||
|  |  | ||||||
|  | @ -16,7 +16,6 @@ import { Embed } from './embed.ts' | ||||||
| import { CHANNEL_MESSAGE } from '../types/endpoint.ts' | import { CHANNEL_MESSAGE } from '../types/endpoint.ts' | ||||||
| import { MessageMentions } from './messageMentions.ts' | import { MessageMentions } from './messageMentions.ts' | ||||||
| import { TextChannel } from './textChannel.ts' | import { TextChannel } from './textChannel.ts' | ||||||
| import { DMChannel } from './dmChannel.ts' |  | ||||||
| import { Guild } from './guild.ts' | import { Guild } from './guild.ts' | ||||||
| 
 | 
 | ||||||
| type AllMessageOptions = MessageOption | Embed | type AllMessageOptions = MessageOption | Embed | ||||||
|  | @ -110,10 +109,9 @@ export class Message extends Base { | ||||||
|     return this.channel.editMessage(this.id, text, option)   |     return this.channel.editMessage(this.id, text, option)   | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   /** These will **not** work in all servers, as this feature is coming slowly. */ | ||||||
|   async reply(text?: string | AllMessageOptions, option?: AllMessageOptions): Promise<Message> { |   async reply(text?: string | AllMessageOptions, option?: AllMessageOptions): Promise<Message> { | ||||||
|     // TODO: Use inline replies once they're out
 |     return this.channel.send(text, option, this) | ||||||
|     if (this.channel instanceof DMChannel) return this.channel.send(text, option) |  | ||||||
|     return this.channel.send(`${this.author.mention}, ${text}`, option) |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   async delete (): Promise<void> { |   async delete (): Promise<void> { | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import { MessagesManager } from "../../mod.ts" | import { MessagesManager } from "../../mod.ts" | ||||||
| import { Client } from '../models/client.ts' | import { Client } from '../models/client.ts' | ||||||
| import { GuildTextChannelPayload, MessageOption, Overwrite, TextChannelPayload } from '../types/channel.ts' | import { GuildTextChannelPayload, MessageOption, MessageReference, Overwrite, TextChannelPayload } from '../types/channel.ts' | ||||||
| import { CHANNEL_MESSAGE, CHANNEL_MESSAGES } from '../types/endpoint.ts' | import { CHANNEL_MESSAGE, CHANNEL_MESSAGES } from '../types/endpoint.ts' | ||||||
| import { Channel } from './channel.ts' | import { Channel } from './channel.ts' | ||||||
| import { Embed } from './embed.ts' | import { Embed } from './embed.ts' | ||||||
|  | @ -14,20 +14,20 @@ export class TextChannel extends Channel { | ||||||
|   lastPinTimestamp?: string |   lastPinTimestamp?: string | ||||||
|   messages: MessagesManager |   messages: MessagesManager | ||||||
| 
 | 
 | ||||||
|   constructor (client: Client, data: TextChannelPayload) { |   constructor(client: Client, data: TextChannelPayload) { | ||||||
|     super(client, data) |     super(client, data) | ||||||
|     this.messages = new MessagesManager(this.client, this) |     this.messages = new MessagesManager(this.client, this) | ||||||
|     this.lastMessageID = data.last_message_id |     this.lastMessageID = data.last_message_id | ||||||
|     this.lastPinTimestamp = data.last_pin_timestamp |     this.lastPinTimestamp = data.last_pin_timestamp | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected readFromData (data: TextChannelPayload): void { |   protected readFromData(data: TextChannelPayload): void { | ||||||
|     super.readFromData(data) |     super.readFromData(data) | ||||||
|     this.lastMessageID = data.last_message_id ?? this.lastMessageID |     this.lastMessageID = data.last_message_id ?? this.lastMessageID | ||||||
|     this.lastPinTimestamp = data.last_pin_timestamp ?? this.lastPinTimestamp |     this.lastPinTimestamp = data.last_pin_timestamp ?? this.lastPinTimestamp | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   async send (text?: string | AllMessageOptions, option?: AllMessageOptions): Promise<Message> { |   async send(text?: string | AllMessageOptions, option?: AllMessageOptions, reply?: Message): Promise<Message> { | ||||||
|     if (typeof text === "object") { |     if (typeof text === "object") { | ||||||
|       option = text |       option = text | ||||||
|       text = undefined |       text = undefined | ||||||
|  | @ -38,21 +38,32 @@ export class TextChannel extends Channel { | ||||||
|     if (option instanceof Embed) option = { |     if (option instanceof Embed) option = { | ||||||
|       embed: option |       embed: option | ||||||
|     } |     } | ||||||
|      | 
 | ||||||
|     const resp = await this.client.rest.post(CHANNEL_MESSAGES(this.id), { |     const payload: any = { | ||||||
|         content: text, |       content: text, | ||||||
|         embed: option?.embed, |       embed: option?.embed, | ||||||
|         file: option?.file, |       file: option?.file, | ||||||
|         tts: option?.tts, |       tts: option?.tts, | ||||||
|         allowed_mentions: option?.allowedMention |       allowed_mentions: option?.allowedMention | ||||||
|     }) |     } | ||||||
|  | 
 | ||||||
|  |     if (reply !== undefined) { | ||||||
|  |       const reference: MessageReference = { | ||||||
|  |         message_id: reply.id, | ||||||
|  |         channel_id: reply.channel.id, | ||||||
|  |         guild_id: reply.guild?.id, | ||||||
|  |       } | ||||||
|  |       payload.message_reference = reference | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     const resp = await this.client.rest.post(CHANNEL_MESSAGES(this.id), payload) | ||||||
| 
 | 
 | ||||||
|     const res = new Message(this.client, resp, this, this.client.user as any) |     const res = new Message(this.client, resp, this, this.client.user as any) | ||||||
|     await res.mentions.fromPayload(resp) |     await res.mentions.fromPayload(resp) | ||||||
|     return res |     return res | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   async editMessage ( |   async editMessage( | ||||||
|     message: Message | string, |     message: Message | string, | ||||||
|     text?: string, |     text?: string, | ||||||
|     option?: MessageOption |     option?: MessageOption | ||||||
|  | @ -96,7 +107,7 @@ export class GuildTextChannel extends TextChannel { | ||||||
|   topic?: string |   topic?: string | ||||||
|   guild: Guild |   guild: Guild | ||||||
| 
 | 
 | ||||||
|   get mention (): string { |   get mention(): string { | ||||||
|     return `<#${this.id}>` |     return `<#${this.id}>` | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -104,7 +115,7 @@ export class GuildTextChannel extends TextChannel { | ||||||
|     return this.mention |     return this.mention | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   constructor (client: Client, data: GuildTextChannelPayload, guild: Guild) { |   constructor(client: Client, data: GuildTextChannelPayload, guild: Guild) { | ||||||
|     super(client, data) |     super(client, data) | ||||||
|     this.guildID = data.guild_id |     this.guildID = data.guild_id | ||||||
|     this.name = data.name |     this.name = data.name | ||||||
|  | @ -117,7 +128,7 @@ export class GuildTextChannel extends TextChannel { | ||||||
|     this.rateLimit = data.rate_limit_per_user |     this.rateLimit = data.rate_limit_per_user | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected readFromData (data: GuildTextChannelPayload): void { |   protected readFromData(data: GuildTextChannelPayload): void { | ||||||
|     super.readFromData(data) |     super.readFromData(data) | ||||||
|     this.guildID = data.guild_id ?? this.guildID |     this.guildID = data.guild_id ?? this.guildID | ||||||
|     this.name = data.name ?? this.name |     this.name = data.name ?? this.name | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue