diff --git a/components/Modal/Invite.vue b/components/Modal/Invite.vue
index 232114c..de842a2 100644
--- a/components/Modal/Invite.vue
+++ b/components/Modal/Invite.vue
@@ -40,7 +40,8 @@ function copyInvite(type: "link" | "code") {
if (!invite.value) return;
if (type == "link") {
- const inviteUrl = URL.parse(`invite/${invite.value}`, `${window.location.protocol}//${window.location.host}`);
+ const runtimeConfig = useRuntimeConfig();
+ const inviteUrl = URL.parse(`invite/${invite.value}`, `${window.location.protocol}//${window.location.host}${runtimeConfig.app.baseURL}`);
if (inviteUrl) {
navigator.clipboard.writeText(inviteUrl.href);
}
diff --git a/components/Settings/AppSettings/Appearance.vue b/components/Settings/AppSettings/Appearance.vue
index 98c41f9..f6f40f4 100644
--- a/components/Settings/AppSettings/Appearance.vue
+++ b/components/Settings/AppSettings/Appearance.vue
@@ -34,7 +34,8 @@
{{ layout.displayName }}
-
+
+
@@ -60,8 +61,8 @@ import { settingSave, settingsLoad } from '#imports';
const runtimeConfig = useRuntimeConfig()
const baseURL = runtimeConfig.app.baseURL;
-const styleFolder = `${baseURL}themes/style`
-const layoutFolder = `${baseURL}themes/layout`
+const styleFolder = `${baseURL}/themes/style`
+const layoutFolder = `${baseURL}/themes/layout`
const timeFormatTextStrings = ["Auto", "12-Hour", "24-Hour"]
@@ -115,6 +116,7 @@ async function parseTheme(url: string): Promise {
break
case "previewImageUrl":
previewImageUrl = `${layoutFolder}/${lineArray[1].trim()}`
+ console.log(previewImageUrl)
break
}
}
diff --git a/components/UserInterface/ResizableSidebar.vue b/components/UserInterface/ResizableSidebar.vue
index 27b0730..79e95bd 100644
--- a/components/UserInterface/ResizableSidebar.vue
+++ b/components/UserInterface/ResizableSidebar.vue
@@ -34,7 +34,7 @@ const storedWidth = ref();
const contextMenu = useState("contextMenu");
const menuItems: ContextMenuItem[] = [
- { name: "Reset", callback: () => {
+ { name: "Reset", type: "normal", callback: () => {
const defaultWidth = props.width ?? props.minWidth;
resizableSidebar.value!.style.width = defaultWidth;
if (props.localStorageName) {
diff --git a/types/enums.ts b/types/enums.ts
new file mode 100644
index 0000000..ac2daba
--- /dev/null
+++ b/types/enums.ts
@@ -0,0 +1,11 @@
+export const enum Permission {
+ SendMessage = 1,
+ ManageChannel = 2,
+ ManageRole = 4,
+ CreateInvite = 8,
+ ManageInvite = 16,
+ ManageGuild = 32,
+ ManageMember = 64,
+ BanMember = 128,
+ KickMember = 256
+}
\ No newline at end of file
diff --git a/types/interfaces.ts b/types/interfaces.ts
index 276c4dc..d175d76 100644
--- a/types/interfaces.ts
+++ b/types/interfaces.ts
@@ -19,16 +19,17 @@ export interface GuildResponse {
description: string | null,
icon: string | null,
owner_uuid: string,
- roles: [],
+ roles: RoleResponse[],
member_count: number
}
export interface GuildMemberResponse {
uuid: string,
nickname: string,
- user_uuid: string,
guild_uuid: string,
- user: UserResponse
+ is_owner: boolean,
+ user: UserResponse,
+ roles: RoleResponse[]
}
export interface GuildMembersResponse {
diff --git a/utils/hasPermission.ts b/utils/hasPermission.ts
new file mode 100644
index 0000000..750716e
--- /dev/null
+++ b/utils/hasPermission.ts
@@ -0,0 +1,11 @@
+import type { Permission } from "~/types/enums";
+import type { GuildMemberResponse } from "~/types/interfaces";
+
+export default (member: GuildMemberResponse, permission: Permission) => {
+ for (const role of member.roles) {
+ if (role.permissions & permission) {
+ return true;
+ }
+ }
+ return false;
+}