🐛 fix types
This commit is contained in:
parent
9fb7bf9491
commit
ec4ac6f788
@ -138,7 +138,7 @@ export interface ChannelPinsUpdateEvent extends Event {
|
|||||||
data: {
|
data: {
|
||||||
guild_id?: string;
|
guild_id?: string;
|
||||||
channel_id: string;
|
channel_id: string;
|
||||||
last_pin_timestamp: number;
|
last_pin_timestamp?: number;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,9 +276,9 @@ export interface InviteDeleteEvent extends Event {
|
|||||||
export type MessagePayload = Omit<Message, "author_id"> & {
|
export type MessagePayload = Omit<Message, "author_id"> & {
|
||||||
channel_id: string;
|
channel_id: string;
|
||||||
guild_id?: string;
|
guild_id?: string;
|
||||||
author: User;
|
author: PublicUser;
|
||||||
member: PublicMember;
|
member: PublicMember;
|
||||||
mentions: (User & { member: PublicMember })[];
|
mentions: (PublicUser & { member: PublicMember })[];
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface MessageCreateEvent extends Event {
|
export interface MessageCreateEvent extends Event {
|
||||||
|
@ -40,7 +40,9 @@ export interface Message {
|
|||||||
// mongoose virtuals:
|
// mongoose virtuals:
|
||||||
author?: PublicUser;
|
author?: PublicUser;
|
||||||
member?: PublicMember;
|
member?: PublicMember;
|
||||||
mentions?: PublicUser[];
|
mentions?: (PublicUser & {
|
||||||
|
member: PublicMember;
|
||||||
|
})[];
|
||||||
mention_roles?: Role[];
|
mention_roles?: Role[];
|
||||||
mention_channels?: Channel[];
|
mention_channels?: Channel[];
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import EventEmitter from "events";
|
|||||||
import { Document } from "mongoose";
|
import { Document } from "mongoose";
|
||||||
const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
|
const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
|
||||||
|
|
||||||
|
// TODO: auto throw error if findOne doesn't find anything
|
||||||
console.log(`[DB] connect: ${uri}`);
|
console.log(`[DB] connect: ${uri}`);
|
||||||
|
|
||||||
const connection = mongoose.createConnection(uri, {
|
const connection = mongoose.createConnection(uri, {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
import { MemberDocument, MemberModel } from "../models/Member";
|
import { MemberDocument, MemberModel } from "../models/Member";
|
||||||
import { ChannelDocument, ChannelModel } from "../models/Channel";
|
import { ChannelDocument, ChannelModel } from "../models/Channel";
|
||||||
import { ChannelPermissionOverwrite } from "../models/Channel";
|
import { ChannelPermissionOverwrite } from "../models/Channel";
|
||||||
import { Role, RoleModel } from "../models/Role";
|
import { Role, RoleDocument, RoleModel } from "../models/Role";
|
||||||
import { BitField } from "./BitField";
|
import { BitField } from "./BitField";
|
||||||
import { GuildDocument, GuildModel } from "../models/Guild";
|
import { GuildDocument, GuildModel } from "../models/Guild";
|
||||||
// TODO: check role hierarchy permission
|
// TODO: check role hierarchy permission
|
||||||
@ -54,6 +54,8 @@ type PermissionString =
|
|||||||
const CUSTOM_PERMISSION_OFFSET = 1n << 48n; // 16 free custom permission bits, and 16 for discord to add new ones
|
const CUSTOM_PERMISSION_OFFSET = 1n << 48n; // 16 free custom permission bits, and 16 for discord to add new ones
|
||||||
|
|
||||||
export class Permissions extends BitField {
|
export class Permissions extends BitField {
|
||||||
|
cache: PermissionCache = {};
|
||||||
|
|
||||||
static FLAGS = {
|
static FLAGS = {
|
||||||
CREATE_INSTANT_INVITE: 1n << 0n,
|
CREATE_INSTANT_INVITE: 1n << 0n,
|
||||||
KICK_MEMBERS: 1n << 1n,
|
KICK_MEMBERS: 1n << 1n,
|
||||||
@ -186,14 +188,20 @@ export class Permissions extends BitField {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type PermissionCache = {
|
||||||
|
channel?: ChannelDocument | null;
|
||||||
|
member?: MemberDocument | null;
|
||||||
|
guild?: GuildDocument | null;
|
||||||
|
roles?: RoleDocument[] | null;
|
||||||
|
};
|
||||||
|
|
||||||
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: PermissionCache = {}
|
||||||
) {
|
) {
|
||||||
var { channel, member, guild } = cache || {};
|
var { channel, member, guild, roles } = cache;
|
||||||
var roles;
|
|
||||||
|
|
||||||
if (!user_id) throw new HTTPError("User not found");
|
if (!user_id) throw new HTTPError("User not found");
|
||||||
|
|
||||||
@ -214,7 +222,7 @@ 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 HTTPError("Member not found");
|
if (!member) throw new HTTPError("Member not found");
|
||||||
|
|
||||||
roles = await RoleModel.find({ guild_id, id: { $in: member.roles } }).exec();
|
if (!roles) roles = await RoleModel.find({ guild_id, id: { $in: member.roles } }).exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
var permission = Permissions.finalPermission({
|
var permission = Permissions.finalPermission({
|
||||||
@ -232,5 +240,10 @@ export async function getPermission(
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return new Permissions(permission);
|
const obj = new Permissions(permission);
|
||||||
|
|
||||||
|
// pass cache to permission for possible future getPermission calls
|
||||||
|
obj.cache = { guild, member, channel, roles };
|
||||||
|
|
||||||
|
return obj;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user