add embed support! (#894)

* add embed support!

* document message embeds

* make gawdl3y happy

* make edit great again

* make docs better

* Update Message.js

* Update TextBasedChannel.js

* Update TextBasedChannel.js
This commit is contained in:
Gus Caplan
2016-11-13 00:05:13 -06:00
committed by Schuyler Cebulskie
parent ee3a03f707
commit 27270a3bad
3 changed files with 19 additions and 10 deletions

View File

@@ -48,7 +48,7 @@ class RESTMethods {
return this.rest.makeRequest('get', Constants.Endpoints.botGateway, true); return this.rest.makeRequest('get', Constants.Endpoints.botGateway, true);
} }
sendMessage(channel, content, { tts, nonce, disableEveryone, split } = {}, file = null) { sendMessage(channel, content, { tts, nonce, embed, disableEveryone, split } = {}, file = null) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (typeof content !== 'undefined') content = this.rest.client.resolver.resolveString(content); if (typeof content !== 'undefined') content = this.rest.client.resolver.resolveString(content);
@@ -62,15 +62,15 @@ class RESTMethods {
if (channel instanceof User || channel instanceof GuildMember) { if (channel instanceof User || channel instanceof GuildMember) {
this.createDM(channel).then(chan => { this.createDM(channel).then(chan => {
this._sendMessageRequest(chan, content, file, tts, nonce, resolve, reject); this._sendMessageRequest(chan, content, file, tts, nonce, embed, resolve, reject);
}, reject); }, reject);
} else { } else {
this._sendMessageRequest(channel, content, file, tts, nonce, resolve, reject); this._sendMessageRequest(channel, content, file, tts, nonce, embed, resolve, reject);
} }
}); });
} }
_sendMessageRequest(channel, content, file, tts, nonce, resolve, reject) { _sendMessageRequest(channel, content, file, tts, nonce, embed, resolve, reject) {
if (content instanceof Array) { if (content instanceof Array) {
const datas = []; const datas = [];
let promise = this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, { let promise = this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
@@ -83,7 +83,7 @@ class RESTMethods {
promise = promise.then(data => { promise = promise.then(data => {
datas.push(data); datas.push(data);
return this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, { return this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
content: content[i2], tts, nonce, content: content[i2], tts, nonce, embed,
}, file); }, file);
}, reject); }, reject);
} else { } else {
@@ -95,7 +95,7 @@ class RESTMethods {
} }
} else { } else {
this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, { this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
content, tts, nonce, content, tts, nonce, embed,
}, file) }, file)
.then(data => resolve(this.rest.client.actions.MessageCreate.handle(data).message), reject); .then(data => resolve(this.rest.client.actions.MessageCreate.handle(data).message), reject);
} }
@@ -122,10 +122,10 @@ class RESTMethods {
); );
} }
updateMessage(message, content) { updateMessage(message, content, { embed } = {}) {
content = this.rest.client.resolver.resolveString(content); content = this.rest.client.resolver.resolveString(content);
return this.rest.makeRequest('patch', Constants.Endpoints.channelMessage(message.channel.id, message.id), true, { return this.rest.makeRequest('patch', Constants.Endpoints.channelMessage(message.channel.id, message.id), true, {
content, content, embed,
}).then(data => this.rest.client.actions.MessageUpdate.handle(data).updated); }).then(data => this.rest.client.actions.MessageUpdate.handle(data).updated);
} }

View File

@@ -340,9 +340,16 @@ class Message {
return this.mentions.users.has(data) || this.mentions.channels.has(data) || this.mentions.roles.has(data); return this.mentions.users.has(data) || this.mentions.channels.has(data) || this.mentions.roles.has(data);
} }
/**
* Options that can be passed into editMessage
* @typedef {Object} MessageEditOptions
* @property {Object} [embed] An embed to be added/edited
*/
/** /**
* Edit the content of the message * Edit the content of the message
* @param {StringResolvable} content The new content for the message * @param {StringResolvable} content The new content for the message
* @param {MessageEditOptions} [options={}] The options to provide
* @returns {Promise<Message>} * @returns {Promise<Message>}
* @example * @example
* // update the content of a message * // update the content of a message
@@ -350,8 +357,8 @@ class Message {
* .then(msg => console.log(`Updated the content of a message from ${msg.author}`)) * .then(msg => console.log(`Updated the content of a message from ${msg.author}`))
* .catch(console.error); * .catch(console.error);
*/ */
edit(content) { edit(content, options = {}) {
return this.client.rest.methods.updateMessage(this, content); return this.client.rest.methods.updateMessage(this, content, options);
} }
/** /**

View File

@@ -28,6 +28,8 @@ class TextBasedChannel {
* @typedef {Object} MessageOptions * @typedef {Object} MessageOptions
* @property {boolean} [tts=false] Whether or not the message should be spoken aloud * @property {boolean} [tts=false] Whether or not the message should be spoken aloud
* @property {string} [nonce=''] The nonce for the message * @property {string} [nonce=''] The nonce for the message
* @property {Object} [embed] An embed for the message
* (see [here](https://discordapp.com/developers/docs/resources/channel#embed-object) for more details)
* @property {boolean} [disableEveryone=this.client.options.disableEveryone] Whether or not @everyone and @here * @property {boolean} [disableEveryone=this.client.options.disableEveryone] Whether or not @everyone and @here
* should be replaced with plain-text * should be replaced with plain-text
* @property {boolean|SplitOptions} [split=false] Whether or not the message should be split into multiple messages if * @property {boolean|SplitOptions} [split=false] Whether or not the message should be split into multiple messages if