mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-16 19:43:29 +01:00
add lots of group dm features (#1208)
* group dm stuff * minor doc changes
This commit is contained in:
@@ -14,6 +14,7 @@ const Webhook = require('../../structures/Webhook');
|
|||||||
const UserProfile = require('../../structures/UserProfile');
|
const UserProfile = require('../../structures/UserProfile');
|
||||||
const OAuth2Application = require('../../structures/OAuth2Application');
|
const OAuth2Application = require('../../structures/OAuth2Application');
|
||||||
const Channel = require('../../structures/Channel');
|
const Channel = require('../../structures/Channel');
|
||||||
|
const GroupDMChannel = require('../../structures/GroupDMChannel');
|
||||||
const Guild = require('../../structures/Guild');
|
const Guild = require('../../structures/Guild');
|
||||||
const VoiceRegion = require('../../structures/VoiceRegion');
|
const VoiceRegion = require('../../structures/VoiceRegion');
|
||||||
|
|
||||||
@@ -246,6 +247,23 @@ class RESTMethods {
|
|||||||
}).then(data => this.client.actions.ChannelCreate.handle(data).channel);
|
}).then(data => this.client.actions.ChannelCreate.handle(data).channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createGroupDM(options) {
|
||||||
|
const data = this.client.user.bot ?
|
||||||
|
{ access_tokens: options.accessTokens, nicks: options.nicks } :
|
||||||
|
{ recipients: options.recipients };
|
||||||
|
|
||||||
|
return this.rest.makeRequest('post', Constants.Endpoints.meChannels, true, data)
|
||||||
|
.then(res => new GroupDMChannel(this.client, res));
|
||||||
|
}
|
||||||
|
|
||||||
|
addUserToGroupDM(channel, options) {
|
||||||
|
const data = this.client.user.bot ?
|
||||||
|
{ nick: options.nick, access_token: options.accessToken } :
|
||||||
|
{ recipient: options.id };
|
||||||
|
return this.rest.makeRequest('put', Constants.Endpoints.dmChannelRecipient(channel.id, options.id), true, data)
|
||||||
|
.then(() => channel);
|
||||||
|
}
|
||||||
|
|
||||||
getExistingDM(recipient) {
|
getExistingDM(recipient) {
|
||||||
return this.client.channels.find(channel =>
|
return this.client.channels.find(channel =>
|
||||||
channel.recipient && channel.recipient.id === recipient.id
|
channel.recipient && channel.recipient.id === recipient.id
|
||||||
|
|||||||
@@ -301,6 +301,29 @@ class ClientUser extends User {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An object containing either a user or access token, and an optional nickname
|
||||||
|
* @typedef {Object} GroupDMRecipientOptions
|
||||||
|
* @property {UserResolvable|Snowflake} [user] User to add to the group dm
|
||||||
|
* (only available if a user is creating the dm)
|
||||||
|
* @property {string} [accessToken] Access token to use to add a user to the group dm
|
||||||
|
* (only available if a bot is creating the dm)
|
||||||
|
* @property {string} [nick] Permanent nickname (only available if a bot is creating the dm)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a group dm
|
||||||
|
* @param {GroupDMRecipientOptions[]} recipients The recipients
|
||||||
|
* @returns {Promise<GroupDMChannel>}
|
||||||
|
*/
|
||||||
|
createGroupDM(recipients) {
|
||||||
|
return this.client.rest.methods.createGroupDM({
|
||||||
|
recipients: recipients.map(u => this.client.resolver.resolveUserID(u.user)),
|
||||||
|
accessTokens: recipients.map(u => u.accessToken),
|
||||||
|
nicks: recipients.map(u => u.nick),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Invite|string} invite Invite or code to accept
|
* @param {Invite|string} invite Invite or code to accept
|
||||||
* @returns {Promise<Guild>} Joined guild
|
* @returns {Promise<Guild>} Joined guild
|
||||||
|
|||||||
@@ -58,6 +58,24 @@ class GroupDMChannel extends Channel {
|
|||||||
*/
|
*/
|
||||||
this.ownerID = data.owner_id;
|
this.ownerID = data.owner_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the dm is managed by an application
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.managed = data.managed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application ID of the application that made this group dm, if applicable
|
||||||
|
* @type {?string}
|
||||||
|
*/
|
||||||
|
this.applicationID = data.application_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nicknames for group members
|
||||||
|
* @type {?Collection<Snowflake, String>}
|
||||||
|
*/
|
||||||
|
if (data.nicks) this.nicks = new Collection(data.nicks.map(n => [n.id, n.nick]));
|
||||||
|
|
||||||
if (!this.recipients) {
|
if (!this.recipients) {
|
||||||
/**
|
/**
|
||||||
* A collection of the recipients of this DM, mapped by their ID.
|
* A collection of the recipients of this DM, mapped by their ID.
|
||||||
@@ -106,6 +124,20 @@ class GroupDMChannel extends Channel {
|
|||||||
return equal;
|
return equal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a user to the dm
|
||||||
|
* @param {UserResolvable|String} accessTokenOrID Access token or user resolvable
|
||||||
|
* @param {string} [nick] Permanent nickname to give the user (only available if a bot is creating the dm)
|
||||||
|
*/
|
||||||
|
|
||||||
|
addUser(accessTokenOrID, nick) {
|
||||||
|
return this.client.rest.methods.addUserToGroupDM(this, {
|
||||||
|
nick,
|
||||||
|
id: this.client.resolver.resolveUserID(accessTokenOrID),
|
||||||
|
accessToken: accessTokenOrID,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When concatenated with a string, this automatically concatenates the channel's name instead of the Channel object.
|
* When concatenated with a string, this automatically concatenates the channel's name instead of the Channel object.
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ const Endpoints = exports.Endpoints = {
|
|||||||
},
|
},
|
||||||
me: `${API}/users/@me`,
|
me: `${API}/users/@me`,
|
||||||
meGuild: (guildID) => `${Endpoints.me}/guilds/${guildID}`,
|
meGuild: (guildID) => `${Endpoints.me}/guilds/${guildID}`,
|
||||||
|
meChannels: `${API}/users/@me/channels`,
|
||||||
meMentions: (limit, roles, everyone, guildID) =>
|
meMentions: (limit, roles, everyone, guildID) =>
|
||||||
`users/@me/mentions?limit=${limit}&roles=${roles}&everyone=${everyone}${guildID ? `&guild_id=${guildID}` : ''}`,
|
`users/@me/mentions?limit=${limit}&roles=${roles}&everyone=${everyone}${guildID ? `&guild_id=${guildID}` : ''}`,
|
||||||
relationships: (userID) => `${Endpoints.user(userID)}/relationships`,
|
relationships: (userID) => `${Endpoints.user(userID)}/relationships`,
|
||||||
@@ -143,6 +144,8 @@ const Endpoints = exports.Endpoints = {
|
|||||||
channelWebhooks: (channelID) => `${Endpoints.channel(channelID)}/webhooks`,
|
channelWebhooks: (channelID) => `${Endpoints.channel(channelID)}/webhooks`,
|
||||||
channelSearch: (channelID) => `${Endpoints.channelMessages(channelID)}/search`,
|
channelSearch: (channelID) => `${Endpoints.channelMessages(channelID)}/search`,
|
||||||
|
|
||||||
|
dmChannelRecipient: (channelID, recipientID) => `${Endpoints.channel(channelID)}/recipients/${recipientID}`,
|
||||||
|
|
||||||
// message reactions
|
// message reactions
|
||||||
messageReactions: (channelID, messageID) => `${Endpoints.channelMessage(channelID, messageID)}/reactions`,
|
messageReactions: (channelID, messageID) => `${Endpoints.channelMessage(channelID, messageID)}/reactions`,
|
||||||
messageReaction:
|
messageReaction:
|
||||||
|
|||||||
Reference in New Issue
Block a user