feat(Message|TextChannel): inline replies

This commit is contained in:
DjDeveloperr 2020-11-17 08:46:32 +05:30
parent 8d4b8f5842
commit 86f82715ca
3 changed files with 31 additions and 21 deletions

View file

@ -16,7 +16,6 @@ import { Embed } from './embed.ts'
import { CHANNEL_MESSAGE } from '../types/endpoint.ts'
import { MessageMentions } from './messageMentions.ts'
import { TextChannel } from './textChannel.ts'
import { DMChannel } from './dmChannel.ts'
import { Guild } from './guild.ts'
type AllMessageOptions = MessageOption | Embed
@ -110,10 +109,9 @@ export class Message extends Base {
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> {
// TODO: Use inline replies once they're out
if (this.channel instanceof DMChannel) return this.channel.send(text, option)
return this.channel.send(`${this.author.mention}, ${text}`, option)
return this.channel.send(text, Object.assign(option, { reply: this }))
}
async delete (): Promise<void> {

View file

@ -1,6 +1,6 @@
import { MessagesManager } from "../../mod.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 } from './channel.ts'
import { Embed } from './embed.ts'
@ -39,13 +39,24 @@ export class TextChannel extends Channel {
embed: option
}
const resp = await this.client.rest.post(CHANNEL_MESSAGES(this.id), {
const payload: any = {
content: text,
embed: option?.embed,
file: option?.file,
tts: option?.tts,
allowed_mentions: option?.allowedMention
})
}
if (option?.reply !== undefined) {
const reference: MessageReference = {
message_id: option.reply.id,
channel_id: option.reply.channel.id,
guild_id: option.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)
await res.mentions.fromPayload(resp)

View file

@ -106,7 +106,8 @@ export interface MessageOption {
parse: ['everyone', 'users', 'roles']
roles: string[]
users: string[]
}
},
reply?: Message
}
export interface ChannelMention {