support multiple attachments
This commit is contained in:
parent
87c15a9283
commit
60e2655085
5 changed files with 67 additions and 3 deletions
|
@ -1,4 +1,6 @@
|
||||||
import * as baseEndpoints from '../consts/urlsAndVersions.ts'
|
import * as baseEndpoints from '../consts/urlsAndVersions.ts'
|
||||||
|
import { Embed } from '../structures/embed.ts'
|
||||||
|
import { MessageAttachment } from '../structures/message.ts'
|
||||||
import { Collection } from '../utils/collection.ts'
|
import { Collection } from '../utils/collection.ts'
|
||||||
import { Client } from './client.ts'
|
import { Client } from './client.ts'
|
||||||
|
|
||||||
|
@ -283,11 +285,46 @@ export class RESTManager {
|
||||||
headers['X-Audit-Log-Reason'] = encodeURIComponent(body.reason)
|
headers['X-Audit-Log-Reason'] = encodeURIComponent(body.reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (body?.file !== undefined) {
|
let _files: undefined | MessageAttachment[]
|
||||||
|
if (body?.embed?.files !== undefined && Array.isArray(body?.embed?.files)) {
|
||||||
|
_files = body?.embed?.files
|
||||||
|
}
|
||||||
|
if (body?.embeds !== undefined && Array.isArray(body?.embeds)) {
|
||||||
|
const files1 = body?.embeds
|
||||||
|
.map((e: Embed) => e.files)
|
||||||
|
.filter((e: MessageAttachment[]) => e !== undefined)
|
||||||
|
for (const files of files1) {
|
||||||
|
for (const file of files) {
|
||||||
|
if (_files === undefined) _files = []
|
||||||
|
_files?.push(file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
body?.file !== undefined ||
|
||||||
|
body?.files !== undefined ||
|
||||||
|
_files !== undefined
|
||||||
|
) {
|
||||||
|
const files: Array<{ blob: Blob; name: string }> = []
|
||||||
|
if (body?.file !== undefined) files.push(body.file)
|
||||||
|
if (body?.files !== undefined && Array.isArray(body.files)) {
|
||||||
|
for (const file of body.files) {
|
||||||
|
files.push(file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_files !== undefined) {
|
||||||
|
for (const file of _files) {
|
||||||
|
files.push(file)
|
||||||
|
}
|
||||||
|
}
|
||||||
const form = new FormData()
|
const form = new FormData()
|
||||||
form.append('file', body.file.blob, body.file.name)
|
for (const file of files) {
|
||||||
|
form.append(file.name, file.blob, file.name)
|
||||||
|
}
|
||||||
const json = JSON.stringify(body)
|
const json = JSON.stringify(body)
|
||||||
form.append('payload_json', json)
|
form.append('payload_json', json)
|
||||||
|
if (body === undefined) body = {}
|
||||||
body.file = form
|
body.file = form
|
||||||
} else if (
|
} else if (
|
||||||
body !== undefined &&
|
body !== undefined &&
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
EmbedVideo
|
EmbedVideo
|
||||||
} from '../types/channel.ts'
|
} from '../types/channel.ts'
|
||||||
import { Colors, ColorUtil } from '../utils/colorutil.ts'
|
import { Colors, ColorUtil } from '../utils/colorutil.ts'
|
||||||
|
import { MessageAttachment } from './message.ts'
|
||||||
|
|
||||||
/** Message Embed Object */
|
/** Message Embed Object */
|
||||||
export class Embed {
|
export class Embed {
|
||||||
|
@ -26,6 +27,7 @@ export class Embed {
|
||||||
provider?: EmbedProvider
|
provider?: EmbedProvider
|
||||||
author?: EmbedAuthor
|
author?: EmbedAuthor
|
||||||
fields?: EmbedField[]
|
fields?: EmbedField[]
|
||||||
|
files: MessageAttachment[] = []
|
||||||
|
|
||||||
constructor(data?: EmbedPayload) {
|
constructor(data?: EmbedPayload) {
|
||||||
this.title = data?.title
|
this.title = data?.title
|
||||||
|
@ -74,6 +76,13 @@ export class Embed {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
attach(...files: MessageAttachment[]): Embed {
|
||||||
|
for (const file of files) {
|
||||||
|
this.files.push(file)
|
||||||
|
}
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
/** Set Embed Type */
|
/** Set Embed Type */
|
||||||
setType(type: EmbedTypes): Embed {
|
setType(type: EmbedTypes): Embed {
|
||||||
this.type = type
|
this.type = type
|
||||||
|
|
|
@ -79,6 +79,7 @@ export class TextChannel extends Channel {
|
||||||
content: content,
|
content: content,
|
||||||
embed: option?.embed,
|
embed: option?.embed,
|
||||||
file: option?.file,
|
file: option?.file,
|
||||||
|
files: option?.files,
|
||||||
tts: option?.tts,
|
tts: option?.tts,
|
||||||
allowed_mentions: option?.allowedMentions
|
allowed_mentions: option?.allowedMentions
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,6 +151,22 @@ client.on('messageCreate', async (msg: Message) => {
|
||||||
'https://cdn.discordapp.com/emojis/626139395623354403.png?v=1'
|
'https://cdn.discordapp.com/emojis/626139395623354403.png?v=1'
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
} else if (msg.content === '!emattach') {
|
||||||
|
msg.channel.send(
|
||||||
|
new Embed()
|
||||||
|
.attach(
|
||||||
|
await MessageAttachment.load(
|
||||||
|
'https://cdn.discordapp.com/emojis/626139395623354403.png?v=1',
|
||||||
|
'file1.png'
|
||||||
|
),
|
||||||
|
await MessageAttachment.load(
|
||||||
|
'https://cdn.discordapp.com/emojis/626139395623354403.png?v=1',
|
||||||
|
'file2.png'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.setImage('attachment://file1.png')
|
||||||
|
.setThumbnail('attachment://file2.png')
|
||||||
|
)
|
||||||
} else if (msg.content === '!textfile') {
|
} else if (msg.content === '!textfile') {
|
||||||
msg.channel.send({
|
msg.channel.send({
|
||||||
file: new MessageAttachment('hello.txt', 'hello world')
|
file: new MessageAttachment('hello.txt', 'hello world')
|
||||||
|
|
|
@ -159,7 +159,8 @@ export interface MessagePayload {
|
||||||
export interface MessageOptions {
|
export interface MessageOptions {
|
||||||
tts?: boolean
|
tts?: boolean
|
||||||
embed?: Embed
|
embed?: Embed
|
||||||
file?: MessageAttachment | string
|
file?: MessageAttachment
|
||||||
|
files?: MessageAttachment[]
|
||||||
allowedMentions?: {
|
allowedMentions?: {
|
||||||
parse?: 'everyone' | 'users' | 'roles'
|
parse?: 'everyone' | 'users' | 'roles'
|
||||||
roles?: string[]
|
roles?: string[]
|
||||||
|
|
Loading…
Reference in a new issue