Add guild member nickname setting n stuff

This commit is contained in:
Amish Shah
2016-08-27 18:55:03 +01:00
parent 8a1bfe559d
commit 6293f28ad9
6 changed files with 100 additions and 4 deletions

View File

@@ -15,5 +15,6 @@ module.exports = {
"consistent-return": 0,
"import/no-extraneous-dependencies": 0,
"no-continue": 0,
"no-confusing-arrow" : 0
}
};

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,10 @@
const Constants = require('../../util/Constants');
const Collection = require('../../util/Constants');
const getStructure = name => require(`../../structures/${name}`);
const User = getStructure('User');
const GuildMember = getStructure('GuildMember');
const Role = getStructure('Role');
class RESTMethods {
constructor(restManager) {
@@ -341,6 +343,31 @@ class RESTMethods {
});
}
updateGuildMember(member, data) {
return new Promise((resolve, reject) => {
if (data.channel) {
data.channel_id = this.client.resolver.resolveChannel(data.channel).id;
}
if (data.roles) {
if (data.roles instanceof Map) {
data.roles = data.roles.array();
}
data.roles = data.roles.map(role => role instanceof Role ? role.id : role);
}
let endpoint = Constants.Endpoints.guildMember(member.guild.id, member.id);
// fix your endpoints, discord ;-;
if (member.id === this.rest.client.user.id) {
if (Object.keys(data).length === 1 && Object.keys(data)[0] === 'nick') {
endpoint = Constants.Endpoints.stupidInconsistentGuildEndpoint(member.guild.id);
}
}
this.rest.makeRequest('patch', endpoint, true, data)
.then(resData => resolve(member.guild._updateMember(member, resData).mem))
.catch(reject);
});
}
updateGuildRole(role, _data) {
return new Promise((resolve, reject) => {
/*

View File

@@ -100,9 +100,18 @@ class Guild {
_updateMember(member, data) {
const oldMember = cloneObject(member);
member._roles = data.roles;
member.nickname = data.nick;
if (this.client.ws.status === Constants.Status.READY) {
if (data.roles) {
member._roles = data.roles;
} else {
member.nickname = data.nick;
}
const notSame = (
member.nickname !== oldMember.nickname &&
!arraysEqual(member._roles, oldMember._roles)
);
if (this.client.ws.status === Constants.Status.READY && notSame) {
/**
* Emitted whenever a Guild Member changes - i.e. new role, removed role, nickname
*
@@ -113,6 +122,10 @@ class Guild {
*/
this.client.emit(Constants.Events.GUILD_MEMBER_UPDATE, this, oldMember, member);
}
return {
old: oldMember,
mem: member,
};
}
_removeMember(guildMember) {

View File

@@ -132,6 +132,60 @@ class GuildMember {
return this.user.id;
}
/**
* Mute/unmute a user
* @param {Boolean} mute whether or not the member should be muted
* @returns {Promise<GuildMember, Error>}
*/
setMute(mute) {
return this.edit({ mute });
}
/**
* Deafen/undeafen a user
* @param {Boolean} deaf whether or not the member should be deafened
* @returns {Promise<GuildMember, Error>}
*/
setDeaf(deaf) {
return this.edit({ deaf });
}
/**
* Moves the Guild Member to the given channel.
* @param {ChannelResolvable} channel the channel to move the member to
* @returns {Promise<GuildMember, Error>}
*/
setVoiceChannel(channel) {
return this.edit({ channel });
}
/**
* Sets the Roles applied to the member.
* @param {Collection<String, Role>|Array<Role>} roles the roles to apply
* @returns {Promise<GuildMember, Error>}
*/
setRoles(roles) {
return this.edit({ roles });
}
/**
* Set the nickname for the Guild Member
* @param {String} nick the nickname for the Guild Member
* @returns {Promise<GuildMember, Error>}
*/
setNickname(nick) {
return this.edit({ nick });
}
/**
* Edit a Guild Member
* @param {GuildmemberEditData} data the data to edit the member with
* @returns {Promise<GuildMember, Error>}
*/
edit(data) {
return this.client.rest.methods.updateGuildMember(this, data);
}
/**
* Deletes any DM's with this Guild Member
* @returns {Promise<DMChannel>}

View File

@@ -98,6 +98,7 @@ const Endpoints = exports.Endpoints = {
guildIntegrations: (guildID) => `${Endpoints.guild(guildID)}/integrations`,
guildMembers: (guildID) => `${Endpoints.guild(guildID)}/members`,
guildMember: (guildID, memberID) => `${Endpoints.guildMembers(guildID)}/${memberID}`,
stupidInconsistentGuildEndpoint: (guildID) => `${Endpoints.guildMember(guildID, '@me')}/nick`,
guildChannels: (guildID) => `${Endpoints.guild(guildID)}/channels`,
// channels