✨ add dm permission
This commit is contained in:
parent
5da7a0f52c
commit
6ec1d5be25
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@fosscord/server-util",
|
"name": "@fosscord/server-util",
|
||||||
"version": "1.0.6",
|
"version": "1.0.7",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@fosscord/server-util",
|
"name": "@fosscord/server-util",
|
||||||
"version": "1.0.6",
|
"version": "1.0.7",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/jsonwebtoken": "^8.5.0",
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fosscord/server-util",
|
"name": "@fosscord/server-util",
|
||||||
"version": "1.0.7",
|
"version": "1.0.8",
|
||||||
"description": "Utility functions for the all server repositories",
|
"description": "Utility functions for the all server repositories",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
|
@ -7,7 +7,7 @@ import { Role, RoleModel } from "../models/Role";
|
|||||||
import { BitField } from "./BitField";
|
import { BitField } from "./BitField";
|
||||||
import { GuildDocument, GuildModel } from "../models/Guild";
|
import { GuildDocument, GuildModel } from "../models/Guild";
|
||||||
|
|
||||||
var HTTPError: typeof Error;
|
var HTTPError: any;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
HTTPError = require("lambert-server").HTTPError;
|
HTTPError = require("lambert-server").HTTPError;
|
||||||
@ -142,6 +142,8 @@ export class Permissions extends BitField {
|
|||||||
guild: { roles: Role[] };
|
guild: { roles: Role[] };
|
||||||
channel?: {
|
channel?: {
|
||||||
overwrites?: ChannelPermissionOverwrite[];
|
overwrites?: ChannelPermissionOverwrite[];
|
||||||
|
recipients?: string[];
|
||||||
|
owner_id?: string;
|
||||||
};
|
};
|
||||||
}) {
|
}) {
|
||||||
let roles = guild.roles.filter((x) => user.roles.includes(x.id));
|
let roles = guild.roles.filter((x) => user.roles.includes(x.id));
|
||||||
@ -156,18 +158,52 @@ export class Permissions extends BitField {
|
|||||||
permission = Permissions.channelPermission(overwrites, permission);
|
permission = Permissions.channelPermission(overwrites, permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (channel?.recipients) {
|
||||||
|
if (channel?.owner_id === user.id) return new Permissions("ADMINISTRATOR");
|
||||||
|
if (channel.recipients.includes(user.id)) {
|
||||||
|
// Default dm permissions
|
||||||
|
return new Permissions([
|
||||||
|
"VIEW_CHANNEL",
|
||||||
|
"SEND_MESSAGES",
|
||||||
|
"STREAM",
|
||||||
|
"ADD_REACTIONS",
|
||||||
|
"EMBED_LINKS",
|
||||||
|
"ATTACH_FILES",
|
||||||
|
"READ_MESSAGE_HISTORY",
|
||||||
|
"MENTION_EVERYONE",
|
||||||
|
"USE_EXTERNAL_EMOJIS",
|
||||||
|
"CONNECT",
|
||||||
|
"SPEAK",
|
||||||
|
"MANAGE_CHANNELS",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Permissions();
|
||||||
|
}
|
||||||
|
|
||||||
return permission;
|
return permission;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getPermission(
|
export async function getPermission(
|
||||||
user_id: string,
|
user_id: string,
|
||||||
guild_id: string,
|
guild_id?: string,
|
||||||
channel_id?: string,
|
channel_id?: string,
|
||||||
cache?: { channel?: ChannelDocument | null; member?: MemberDocument | null; guild?: GuildDocument | null }
|
cache?: { channel?: ChannelDocument | null; member?: MemberDocument | null; guild?: GuildDocument | null }
|
||||||
) {
|
) {
|
||||||
var { channel, member, guild } = cache || {};
|
var { channel, member, guild } = cache || {};
|
||||||
|
var roles;
|
||||||
|
|
||||||
|
if (channel_id && !channel) {
|
||||||
|
channel = await ChannelModel.findOne(
|
||||||
|
{ id: channel_id },
|
||||||
|
{ permission_overwrites: true, recipients: true, owner_id: true, guild_id: true }
|
||||||
|
).exec();
|
||||||
|
if (!channel) throw new HTTPError("Channel not found", 404);
|
||||||
|
if (channel.guild_id) guild_id = channel.guild_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (guild_id) {
|
||||||
if (!guild) guild = await GuildModel.findOne({ id: guild_id }, { owner_id: true }).exec();
|
if (!guild) guild = await GuildModel.findOne({ id: guild_id }, { owner_id: true }).exec();
|
||||||
if (!guild) throw new Error("Guild not found");
|
if (!guild) throw new Error("Guild not found");
|
||||||
if (guild.owner_id === user_id) return new Permissions(Permissions.FLAGS.ADMINISTRATOR);
|
if (guild.owner_id === user_id) return new Permissions(Permissions.FLAGS.ADMINISTRATOR);
|
||||||
@ -175,23 +211,23 @@ export async function getPermission(
|
|||||||
if (!member) member = await MemberModel.findOne({ guild_id, id: user_id }, "roles").exec();
|
if (!member) member = await MemberModel.findOne({ guild_id, id: user_id }, "roles").exec();
|
||||||
if (!member) throw new Error("Member not found");
|
if (!member) throw new Error("Member not found");
|
||||||
|
|
||||||
var roles = await RoleModel.find({ guild_id, id: { $in: member.roles } })
|
roles = await RoleModel.find({ guild_id, id: { $in: member.roles } })
|
||||||
.lean()
|
.lean()
|
||||||
.exec();
|
.exec();
|
||||||
if (channel_id && !channel) {
|
|
||||||
channel = await ChannelModel.findOne({ id: channel_id }, "permission_overwrites").exec();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var permission = Permissions.finalPermission({
|
var permission = Permissions.finalPermission({
|
||||||
user: {
|
user: {
|
||||||
id: user_id,
|
id: user_id,
|
||||||
roles: member.roles,
|
roles: member?.roles || [],
|
||||||
},
|
},
|
||||||
guild: {
|
guild: {
|
||||||
roles: roles,
|
roles: roles || [],
|
||||||
},
|
},
|
||||||
channel: {
|
channel: {
|
||||||
overwrites: channel?.permission_overwrites,
|
overwrites: channel?.permission_overwrites,
|
||||||
|
owner_id: channel?.owner_id,
|
||||||
|
recipients: channel?.recipients,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user