mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-16 11:33:30 +01:00
Add setting channel overwrites
This commit is contained in:
@@ -38,7 +38,7 @@ class ClientDataResolver {
|
|||||||
if (user instanceof User) {
|
if (user instanceof User) {
|
||||||
return user;
|
return user;
|
||||||
} else if ($string(user)) {
|
} else if ($string(user)) {
|
||||||
return this.client.users.get(user.id);
|
return this.client.users.get(user);
|
||||||
} else if (user instanceof Message) {
|
} else if (user instanceof Message) {
|
||||||
return user.author;
|
return user.author;
|
||||||
} else if (user instanceof Guild) {
|
} else if (user instanceof Guild) {
|
||||||
|
|||||||
@@ -284,6 +284,14 @@ class RESTMethods {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setChannelOverwrite(channel, payload) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.rest.makeRequest('put', `${Constants.Endpoints.channelPermissions(channel.id)}/${payload.id}`, true, payload)
|
||||||
|
.then(resolve)
|
||||||
|
.catch(reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
updateGuildRole(role, _data) {
|
updateGuildRole(role, _data) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const Channel = require('./Channel');
|
const Channel = require('./Channel');
|
||||||
const PermissionOverwrites = require('./PermissionOverwrites');
|
const PermissionOverwrites = require('./PermissionOverwrites');
|
||||||
|
const Role = require('./Role');
|
||||||
const EvaluatedPermissions = require('./EvaluatedPermissions');
|
const EvaluatedPermissions = require('./EvaluatedPermissions');
|
||||||
const Constants = require('../util/Constants');
|
const Constants = require('../util/Constants');
|
||||||
|
|
||||||
@@ -56,13 +57,13 @@ class GuildChannel extends Channel {
|
|||||||
this.lastMessageID = data.last_message_id;
|
this.lastMessageID = data.last_message_id;
|
||||||
this.ow = data.permission_overwrites;
|
this.ow = data.permission_overwrites;
|
||||||
/**
|
/**
|
||||||
* A list of permission overwrites in this channel for roles and users.
|
* A map of permission overwrites in this channel for roles and users.
|
||||||
* @type {Array<PermissionOverwrites>}
|
* @type {Map<String, PermissionOverwrites>}
|
||||||
*/
|
*/
|
||||||
this.permissionOverwrites = [];
|
this.permissionOverwrites = new Map();
|
||||||
if (data.permission_overwrites) {
|
if (data.permission_overwrites) {
|
||||||
for (const overwrite of data.permission_overwrites) {
|
for (const overwrite of data.permission_overwrites) {
|
||||||
this.permissionOverwrites.push(new PermissionOverwrites(this, overwrite));
|
this.permissionOverwrites.set(overwrite.id, new PermissionOverwrites(this, overwrite));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,7 +85,7 @@ class GuildChannel extends Channel {
|
|||||||
|
|
||||||
if (base) {
|
if (base) {
|
||||||
if (other.permission_overwrites) {
|
if (other.permission_overwrites) {
|
||||||
const thisIDSet = this.permissionOverwrites.map(overwrite => overwrite.id);
|
const thisIDSet = Array.from(this.permissionOverwrites.keys());
|
||||||
const otherIDSet = other.permission_overwrites.map(overwrite => overwrite.id);
|
const otherIDSet = other.permission_overwrites.map(overwrite => overwrite.id);
|
||||||
if (arraysEqual(thisIDSet, otherIDSet)) {
|
if (arraysEqual(thisIDSet, otherIDSet)) {
|
||||||
base = true;
|
base = true;
|
||||||
@@ -161,6 +162,68 @@ class GuildChannel extends Channel {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An object mapping permission flags to `true` (enabled) or `false` (disabled)
|
||||||
|
* ```js
|
||||||
|
* {
|
||||||
|
* 'SEND_MESSAGES': true,
|
||||||
|
* 'ATTACH_FILES': false,
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
* @typedef {(number|string)} PermissionOverwriteOptions
|
||||||
|
* @example
|
||||||
|
* // overwrite permissions for a message author
|
||||||
|
* message.channel.overwritePermissions(message.author, {
|
||||||
|
* SEND_MESSAGES: false
|
||||||
|
* })
|
||||||
|
* .then(() => console.log('Done!'))
|
||||||
|
* .catch(console.log);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overwrites the permissions for a user or role in this channel.
|
||||||
|
* @param {Role|UserResolvable} userOrRole the user or role to update
|
||||||
|
* @param {PermissionOverwriteOptions} config the configuration for the update
|
||||||
|
* @returns {Promise<null, Error>}
|
||||||
|
*/
|
||||||
|
overwritePermissions(userOrRole, options) {
|
||||||
|
const payload = {
|
||||||
|
allow: 0,
|
||||||
|
deny: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (userOrRole instanceof Role) {
|
||||||
|
payload.type = 'role';
|
||||||
|
} else {
|
||||||
|
userOrRole = this.client.resolver.resolveUser(userOrRole);
|
||||||
|
payload.type = 'member';
|
||||||
|
if (!userOrRole) {
|
||||||
|
return Promise.reject('supplied parameter was neither a user or a role');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
payload.id = userOrRole.id;
|
||||||
|
|
||||||
|
const prevOverwrite = this.permissionOverwrites.get(userOrRole.id);
|
||||||
|
|
||||||
|
if (prevOverwrite) {
|
||||||
|
payload.allow = prevOverwrite.allow;
|
||||||
|
payload.deny = prevOverwrite.deny;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const perm in options) {
|
||||||
|
if (options[perm] === true) {
|
||||||
|
payload.allow |= (Constants.PermissionFlags[perm] || 0);
|
||||||
|
payload.deny &= ~(Constants.PermissionFlags[perm] || 0);
|
||||||
|
} else if (options[perm] === false) {
|
||||||
|
payload.allow &= ~(Constants.PermissionFlags[perm] || 0);
|
||||||
|
payload.deny |= (Constants.PermissionFlags[perm] || 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.client.rest.methods.setChannelOverwrite(this, payload);
|
||||||
|
}
|
||||||
|
|
||||||
edit(data) {
|
edit(data) {
|
||||||
return this.client.rest.methods.updateChannel(this, data);
|
return this.client.rest.methods.updateChannel(this, data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -181,5 +181,15 @@ client.on('message', message => {
|
|||||||
if (message.content === '?perms?') {
|
if (message.content === '?perms?') {
|
||||||
console.log(message.author.username, 'asked for perms in', message.channel.name, ':');
|
console.log(message.author.username, 'asked for perms in', message.channel.name, ':');
|
||||||
console.log(message.channel.permissionsFor(message.author).serialize());
|
console.log(message.channel.permissionsFor(message.author).serialize());
|
||||||
|
} else if (message.content === '???test???') {
|
||||||
|
message.channel.overwritePermissions('', {
|
||||||
|
SEND_MESSAGES: false,
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
message.channel.overwritePermissions('', {
|
||||||
|
SEND_MESSAGES: true,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(console.log);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user