[deploy] Cleanup dashboard nav encoding and fix syntax error
All checks were successful
Deploy Discord Bot / deploy (push) Successful in 37s
All checks were successful
Deploy Discord Bot / deploy (push) Successful in 37s
This commit is contained in:
79
node_modules/.prisma/client/edge.js
generated
vendored
79
node_modules/.prisma/client/edge.js
generated
vendored
File diff suppressed because one or more lines are too long
73
node_modules/.prisma/client/index-browser.js
generated
vendored
73
node_modules/.prisma/client/index-browser.js
generated
vendored
@@ -141,6 +141,8 @@ exports.Prisma.GuildSettingsScalarFieldEnum = {
|
|||||||
reactionRolesEnabled: 'reactionRolesEnabled',
|
reactionRolesEnabled: 'reactionRolesEnabled',
|
||||||
reactionRolesConfig: 'reactionRolesConfig',
|
reactionRolesConfig: 'reactionRolesConfig',
|
||||||
eventsEnabled: 'eventsEnabled',
|
eventsEnabled: 'eventsEnabled',
|
||||||
|
registerEnabled: 'registerEnabled',
|
||||||
|
registerConfig: 'registerConfig',
|
||||||
supportRoleId: 'supportRoleId',
|
supportRoleId: 'supportRoleId',
|
||||||
updatedAt: 'updatedAt',
|
updatedAt: 'updatedAt',
|
||||||
createdAt: 'createdAt'
|
createdAt: 'createdAt'
|
||||||
@@ -157,6 +159,30 @@ exports.Prisma.TicketScalarFieldEnum = {
|
|||||||
status: 'status',
|
status: 'status',
|
||||||
claimedBy: 'claimedBy',
|
claimedBy: 'claimedBy',
|
||||||
transcript: 'transcript',
|
transcript: 'transcript',
|
||||||
|
firstClaimAt: 'firstClaimAt',
|
||||||
|
firstResponseAt: 'firstResponseAt',
|
||||||
|
kbSuggestionSentAt: 'kbSuggestionSentAt',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.TicketAutomationRuleScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
name: 'name',
|
||||||
|
condition: 'condition',
|
||||||
|
action: 'action',
|
||||||
|
active: 'active',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.KnowledgeBaseArticleScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
title: 'title',
|
||||||
|
keywords: 'keywords',
|
||||||
|
content: 'content',
|
||||||
createdAt: 'createdAt',
|
createdAt: 'createdAt',
|
||||||
updatedAt: 'updatedAt'
|
updatedAt: 'updatedAt'
|
||||||
};
|
};
|
||||||
@@ -228,6 +254,45 @@ exports.Prisma.EventSignupScalarFieldEnum = {
|
|||||||
canceledAt: 'canceledAt'
|
canceledAt: 'canceledAt'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterFormScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
name: 'name',
|
||||||
|
description: 'description',
|
||||||
|
reviewChannelId: 'reviewChannelId',
|
||||||
|
notifyRoleIds: 'notifyRoleIds',
|
||||||
|
isActive: 'isActive',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterFormFieldScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
formId: 'formId',
|
||||||
|
label: 'label',
|
||||||
|
type: 'type',
|
||||||
|
required: 'required',
|
||||||
|
sortOrder: 'sortOrder'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterApplicationScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
userId: 'userId',
|
||||||
|
formId: 'formId',
|
||||||
|
status: 'status',
|
||||||
|
reviewedBy: 'reviewedBy',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterApplicationAnswerScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
applicationId: 'applicationId',
|
||||||
|
fieldId: 'fieldId',
|
||||||
|
value: 'value'
|
||||||
|
};
|
||||||
|
|
||||||
exports.Prisma.SortOrder = {
|
exports.Prisma.SortOrder = {
|
||||||
asc: 'asc',
|
asc: 'asc',
|
||||||
desc: 'desc'
|
desc: 'desc'
|
||||||
@@ -262,12 +327,18 @@ exports.Prisma.NullsOrder = {
|
|||||||
exports.Prisma.ModelName = {
|
exports.Prisma.ModelName = {
|
||||||
GuildSettings: 'GuildSettings',
|
GuildSettings: 'GuildSettings',
|
||||||
Ticket: 'Ticket',
|
Ticket: 'Ticket',
|
||||||
|
TicketAutomationRule: 'TicketAutomationRule',
|
||||||
|
KnowledgeBaseArticle: 'KnowledgeBaseArticle',
|
||||||
Level: 'Level',
|
Level: 'Level',
|
||||||
TicketSupportSession: 'TicketSupportSession',
|
TicketSupportSession: 'TicketSupportSession',
|
||||||
Birthday: 'Birthday',
|
Birthday: 'Birthday',
|
||||||
ReactionRoleSet: 'ReactionRoleSet',
|
ReactionRoleSet: 'ReactionRoleSet',
|
||||||
Event: 'Event',
|
Event: 'Event',
|
||||||
EventSignup: 'EventSignup'
|
EventSignup: 'EventSignup',
|
||||||
|
RegisterForm: 'RegisterForm',
|
||||||
|
RegisterFormField: 'RegisterFormField',
|
||||||
|
RegisterApplication: 'RegisterApplication',
|
||||||
|
RegisterApplicationAnswer: 'RegisterApplicationAnswer'
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
8519
node_modules/.prisma/client/index.d.ts
generated
vendored
8519
node_modules/.prisma/client/index.d.ts
generated
vendored
File diff suppressed because it is too large
Load Diff
79
node_modules/.prisma/client/index.js
generated
vendored
79
node_modules/.prisma/client/index.js
generated
vendored
File diff suppressed because one or more lines are too long
73
node_modules/.prisma/client/wasm.js
generated
vendored
73
node_modules/.prisma/client/wasm.js
generated
vendored
@@ -141,6 +141,8 @@ exports.Prisma.GuildSettingsScalarFieldEnum = {
|
|||||||
reactionRolesEnabled: 'reactionRolesEnabled',
|
reactionRolesEnabled: 'reactionRolesEnabled',
|
||||||
reactionRolesConfig: 'reactionRolesConfig',
|
reactionRolesConfig: 'reactionRolesConfig',
|
||||||
eventsEnabled: 'eventsEnabled',
|
eventsEnabled: 'eventsEnabled',
|
||||||
|
registerEnabled: 'registerEnabled',
|
||||||
|
registerConfig: 'registerConfig',
|
||||||
supportRoleId: 'supportRoleId',
|
supportRoleId: 'supportRoleId',
|
||||||
updatedAt: 'updatedAt',
|
updatedAt: 'updatedAt',
|
||||||
createdAt: 'createdAt'
|
createdAt: 'createdAt'
|
||||||
@@ -157,6 +159,30 @@ exports.Prisma.TicketScalarFieldEnum = {
|
|||||||
status: 'status',
|
status: 'status',
|
||||||
claimedBy: 'claimedBy',
|
claimedBy: 'claimedBy',
|
||||||
transcript: 'transcript',
|
transcript: 'transcript',
|
||||||
|
firstClaimAt: 'firstClaimAt',
|
||||||
|
firstResponseAt: 'firstResponseAt',
|
||||||
|
kbSuggestionSentAt: 'kbSuggestionSentAt',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.TicketAutomationRuleScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
name: 'name',
|
||||||
|
condition: 'condition',
|
||||||
|
action: 'action',
|
||||||
|
active: 'active',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.KnowledgeBaseArticleScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
title: 'title',
|
||||||
|
keywords: 'keywords',
|
||||||
|
content: 'content',
|
||||||
createdAt: 'createdAt',
|
createdAt: 'createdAt',
|
||||||
updatedAt: 'updatedAt'
|
updatedAt: 'updatedAt'
|
||||||
};
|
};
|
||||||
@@ -228,6 +254,45 @@ exports.Prisma.EventSignupScalarFieldEnum = {
|
|||||||
canceledAt: 'canceledAt'
|
canceledAt: 'canceledAt'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterFormScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
name: 'name',
|
||||||
|
description: 'description',
|
||||||
|
reviewChannelId: 'reviewChannelId',
|
||||||
|
notifyRoleIds: 'notifyRoleIds',
|
||||||
|
isActive: 'isActive',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterFormFieldScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
formId: 'formId',
|
||||||
|
label: 'label',
|
||||||
|
type: 'type',
|
||||||
|
required: 'required',
|
||||||
|
sortOrder: 'sortOrder'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterApplicationScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
guildId: 'guildId',
|
||||||
|
userId: 'userId',
|
||||||
|
formId: 'formId',
|
||||||
|
status: 'status',
|
||||||
|
reviewedBy: 'reviewedBy',
|
||||||
|
createdAt: 'createdAt',
|
||||||
|
updatedAt: 'updatedAt'
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Prisma.RegisterApplicationAnswerScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
|
applicationId: 'applicationId',
|
||||||
|
fieldId: 'fieldId',
|
||||||
|
value: 'value'
|
||||||
|
};
|
||||||
|
|
||||||
exports.Prisma.SortOrder = {
|
exports.Prisma.SortOrder = {
|
||||||
asc: 'asc',
|
asc: 'asc',
|
||||||
desc: 'desc'
|
desc: 'desc'
|
||||||
@@ -262,12 +327,18 @@ exports.Prisma.NullsOrder = {
|
|||||||
exports.Prisma.ModelName = {
|
exports.Prisma.ModelName = {
|
||||||
GuildSettings: 'GuildSettings',
|
GuildSettings: 'GuildSettings',
|
||||||
Ticket: 'Ticket',
|
Ticket: 'Ticket',
|
||||||
|
TicketAutomationRule: 'TicketAutomationRule',
|
||||||
|
KnowledgeBaseArticle: 'KnowledgeBaseArticle',
|
||||||
Level: 'Level',
|
Level: 'Level',
|
||||||
TicketSupportSession: 'TicketSupportSession',
|
TicketSupportSession: 'TicketSupportSession',
|
||||||
Birthday: 'Birthday',
|
Birthday: 'Birthday',
|
||||||
ReactionRoleSet: 'ReactionRoleSet',
|
ReactionRoleSet: 'ReactionRoleSet',
|
||||||
Event: 'Event',
|
Event: 'Event',
|
||||||
EventSignup: 'EventSignup'
|
EventSignup: 'EventSignup',
|
||||||
|
RegisterForm: 'RegisterForm',
|
||||||
|
RegisterFormField: 'RegisterFormField',
|
||||||
|
RegisterApplication: 'RegisterApplication',
|
||||||
|
RegisterApplicationAnswer: 'RegisterApplicationAnswer'
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Router } from 'express';
|
import { Router } from 'express';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
@@ -42,20 +42,21 @@ router.get('/', (req, res) => {
|
|||||||
const sidebar = `
|
const sidebar = `
|
||||||
<aside class="sidebar">
|
<aside class="sidebar">
|
||||||
<div class="brand">Papo Control</div>
|
<div class="brand">Papo Control</div>
|
||||||
<div class="nav">
|
|
||||||
<a class="active" href="#overview" data-target="overview"><span class="icon">📊</span> Uebersicht</a>
|
<div class="nav">
|
||||||
<a href="#tickets" data-target="tickets"><span class="icon">🎫</span> Ticketsystem</a>
|
<a class="active" href="#overview" data-target="overview"><span class="icon">[ ]</span> Uebersicht</a>
|
||||||
<a href="#automod" data-target="automod" class="automod-link"><span class="icon">🛡️</span> Automod</a>
|
<a href="#tickets" data-target="tickets"><span class="icon">[ ]</span> Ticketsystem</a>
|
||||||
<a href="#welcome" data-target="welcome" class="welcome-link"><span class="icon">👋</span> Willkommen</a>
|
<a href="#automod" data-target="automod" class="automod-link"><span class="icon">[ ]</span> Automod</a>
|
||||||
<a href="#dynamicvoice" data-target="dynamicvoice" class="dynamicvoice-link"><span class="icon">🎙️</span> Dynamic Voice</a>
|
<a href="#welcome" data-target="welcome" class="welcome-link"><span class="icon">[ ]</span> Willkommen</a>
|
||||||
<a href="#birthday" data-target="birthday" class="birthday-link"><span class="icon">🎂</span> Birthday</a>
|
<a href="#dynamicvoice" data-target="dynamicvoice" class="dynamicvoice-link"><span class="icon">[ ]</span> Dynamic Voice</a>
|
||||||
<a href="#reactionroles" data-target="reactionroles" class="reactionroles-link"><span class="icon">✨</span> Reaction Roles</a>
|
<a href="#birthday" data-target="birthday" class="birthday-link"><span class="icon">[ ]</span> Birthday</a>
|
||||||
<a href="#statuspage" data-target="statuspage" class="statuspage-link"><span class="icon">📈</span> Statuspage</a>
|
<a href="#reactionroles" data-target="reactionroles" class="reactionroles-link"><span class="icon">[ ]</span> Reaction Roles</a>
|
||||||
<a href="#settings" data-target="settings"><span class="icon">⚙️</span> Einstellungen</a>
|
<a href="#statuspage" data-target="statuspage" class="statuspage-link"><span class="icon">[ ]</span> Statuspage</a>
|
||||||
<a href="#modules" data-target="modules"><span class="icon">🧩</span> Module</a>
|
<a href="#settings" data-target="settings"><span class="icon">[ ]</span> Einstellungen</a>
|
||||||
<a href="#register" data-target="register" class="register-link"><span class="icon">📋</span> Register</a>
|
<a href="#modules" data-target="modules"><span class="icon">[ ]</span> Module</a>
|
||||||
<a href="#events" data-target="events" class="events-link"><span class="icon">🗓️</span> Events</a>
|
<a href="#register" data-target="register" class="register-link"><span class="icon">[ ]</span> Register</a>
|
||||||
<a href="#admin" data-target="admin" class="admin-link hidden"><span class="icon">🛠️</span> Admin</a>
|
<a href="#events" data-target="events" class="events-link"><span class="icon">[ ]</span> Events</a>
|
||||||
|
<a href="#admin" data-target="admin" class="admin-link hidden"><span class="icon">[ ]</span> Admin</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="muted"> Angemeldet als <span id="userInfo"></span></div>
|
<div class="muted"> Angemeldet als <span id="userInfo"></span></div>
|
||||||
<button id="logoutBtn" class="logout">Logout</button>
|
<button id="logoutBtn" class="logout">Logout</button>
|
||||||
@@ -336,10 +337,10 @@ router.get('/', (req, res) => {
|
|||||||
<div class="card" style="display:flex; gap:10px; flex-wrap:wrap; align-items:center; justify-content:space-between;">
|
<div class="card" style="display:flex; gap:10px; flex-wrap:wrap; align-items:center; justify-content:space-between;">
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title">Tickets</p>
|
<p class="section-title">Tickets</p>
|
||||||
<p class="section-sub"><EFBFBD>bersicht, Pipeline, SLA, Automationen, Knowledge-Base.</p>
|
<p class="section-sub"> bersicht, Pipeline, SLA, Automationen, Knowledge-Base.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="row" style="gap:8px; flex-wrap:wrap;">
|
<div class="row" style="gap:8px; flex-wrap:wrap;">
|
||||||
<button class="secondary-btn ticket-tab-btn active" data-tab="overview"><EFBFBD>bersicht</button>
|
<button class="secondary-btn ticket-tab-btn active" data-tab="overview"> bersicht</button>
|
||||||
<button class="secondary-btn ticket-tab-btn" data-tab="pipeline">Pipeline</button>
|
<button class="secondary-btn ticket-tab-btn" data-tab="pipeline">Pipeline</button>
|
||||||
<button class="secondary-btn ticket-tab-btn" data-tab="sla">SLA</button>
|
<button class="secondary-btn ticket-tab-btn" data-tab="sla">SLA</button>
|
||||||
<button class="secondary-btn ticket-tab-btn" data-tab="automations">Automationen</button>
|
<button class="secondary-btn ticket-tab-btn" data-tab="automations">Automationen</button>
|
||||||
@@ -352,7 +353,7 @@ router.get('/', (req, res) => {
|
|||||||
<div style="display:flex; align-items:center; justify-content:space-between; gap:12px;">
|
<div style="display:flex; align-items:center; justify-content:space-between; gap:12px;">
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title">Ticketliste</p>
|
<p class="section-title">Ticketliste</p>
|
||||||
<p class="section-sub">Links ausw<EFBFBD>hlen, Details im Modal. Plus <EFBFBD>ffnet Panel-Erstellung.</p>
|
<p class="section-sub">Links ausw hlen, Details im Modal. Plus ffnet Panel-Erstellung.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="row" style="gap:10px;">
|
<div class="row" style="gap:10px;">
|
||||||
<button class="secondary-btn" id="openSupportLogin" type="button">Support-Login Einstellungen</button>
|
<button class="secondary-btn" id="openSupportLogin" type="button">Support-Login Einstellungen</button>
|
||||||
@@ -387,7 +388,7 @@ router.get('/', (req, res) => {
|
|||||||
<div style="display:flex; justify-content:space-between; align-items:center; gap:12px;">
|
<div style="display:flex; justify-content:space-between; align-items:center; gap:12px;">
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title">Status-Pipeline</p>
|
<p class="section-title">Status-Pipeline</p>
|
||||||
<p class="section-sub">Tickets nach Phase. Status per Dropdown <EFBFBD>ndern.</p>
|
<p class="section-sub">Tickets nach Phase. Status per Dropdown ndern.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid" style="grid-template-columns: repeat(auto-fit, minmax(240px,1fr)); gap:12px;" id="pipelineGrid">
|
<div class="grid" style="grid-template-columns: repeat(auto-fit, minmax(240px,1fr)); gap:12px;" id="pipelineGrid">
|
||||||
@@ -436,7 +437,7 @@ router.get('/', (req, res) => {
|
|||||||
<div style="display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap;">
|
<div style="display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap;">
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title">Automationen</p>
|
<p class="section-title">Automationen</p>
|
||||||
<p class="section-sub">Regeln f<EFBFBD>r Ticket-Aktionen.</p>
|
<p class="section-sub">Regeln f r Ticket-Aktionen.</p>
|
||||||
</div>
|
</div>
|
||||||
<button class="secondary-btn" id="addAutomation">Neue Regel</button>
|
<button class="secondary-btn" id="addAutomation">Neue Regel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -473,7 +474,7 @@ router.get('/', (req, res) => {
|
|||||||
<div style="display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap;">
|
<div style="display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap;">
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title">Knowledge-Base</p>
|
<p class="section-title">Knowledge-Base</p>
|
||||||
<p class="section-sub">Artikel f<EFBFBD>r Self-Service.</p>
|
<p class="section-sub">Artikel f r Self-Service.</p>
|
||||||
</div>
|
</div>
|
||||||
<button class="secondary-btn" id="addKb">Neuer Artikel</button>
|
<button class="secondary-btn" id="addKb">Neuer Artikel</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -592,7 +593,7 @@ router.get('/', (req, res) => {
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
<label class="form-label">Embed Footer</label>
|
<label class="form-label">Embed Footer</label>
|
||||||
<input id="welcomeFooter" placeholder="Schön, dass du da bist!" />
|
<input id="welcomeFooter" placeholder="Sch n, dass du da bist!" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
@@ -615,7 +616,7 @@ router.get('/', (req, res) => {
|
|||||||
<div class="embed-color" id="welcomePreviewColor"></div>
|
<div class="embed-color" id="welcomePreviewColor"></div>
|
||||||
<div class="embed-body">
|
<div class="embed-body">
|
||||||
<div class="embed-title" id="welcomePreviewTitle">Willkommen!</div>
|
<div class="embed-title" id="welcomePreviewTitle">Willkommen!</div>
|
||||||
<div class="embed-desc" id="welcomePreviewDesc">Schön, dass du da bist.</div>
|
<div class="embed-desc" id="welcomePreviewDesc">Sch n, dass du da bist.</div>
|
||||||
<div class="embed-footer" id="welcomePreviewFooter">Footer</div>
|
<div class="embed-footer" id="welcomePreviewFooter">Footer</div>
|
||||||
<img id="welcomePreviewImage" class="embed-image" style="display:none;" />
|
<img id="welcomePreviewImage" class="embed-image" style="display:none;" />
|
||||||
</div>
|
</div>
|
||||||
@@ -815,7 +816,7 @@ router.get('/', (req, res) => {
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
<label class="form-label">Eintraege (Emoji | Role ID | Label | Beschreibung)</label>
|
<label class="form-label">Eintraege (Emoji | Role ID | Label | Beschreibung)</label>
|
||||||
<textarea id="reactionRoleEntries" rows="4" placeholder="😀 | 123456789 | Freunde | Erhaelt Freunde Rolle"></textarea>
|
<textarea id="reactionRoleEntries" rows="4" placeholder=" | 123456789 | Freunde | Erhaelt Freunde Rolle"></textarea>
|
||||||
<p class="muted">Eine Zeile pro Zuordnung. Label/Beschreibung optional.</p>
|
<p class="muted">Eine Zeile pro Zuordnung. Label/Beschreibung optional.</p>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:flex; justify-content:flex-end; gap:10px;">
|
<div style="display:flex; justify-content:flex-end; gap:10px;">
|
||||||
@@ -889,7 +890,7 @@ router.get('/', (req, res) => {
|
|||||||
<section class="card">
|
<section class="card">
|
||||||
<div class="row" style="justify-content:space-between;">
|
<div class="row" style="justify-content:space-between;">
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title">Aktivität (letzte 24h)</p>
|
<p class="section-title">Aktivit t (letzte 24h)</p>
|
||||||
<p class="section-sub">Events/Commands pro Stunde</p>
|
<p class="section-sub">Events/Commands pro Stunde</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -899,7 +900,7 @@ router.get('/', (req, res) => {
|
|||||||
<div class="row" style="justify-content:space-between;">
|
<div class="row" style="justify-content:space-between;">
|
||||||
<div>
|
<div>
|
||||||
<p class="section-title">Logs</p>
|
<p class="section-title">Logs</p>
|
||||||
<p class="section-sub">Neueste Einträge</p>
|
<p class="section-sub">Neueste Eintr ge</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="log-list" id="adminLogs"></ul>
|
<ul class="log-list" id="adminLogs"></ul>
|
||||||
@@ -926,13 +927,13 @@ router.get('/', (req, res) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="option-grid">
|
<div class="option-grid">
|
||||||
<div class="option-card"><span>👋 User Join / Leave</span><div id="logJoinLeave" class="switch on"></div></div>
|
<div class="option-card"><span> User Join / Leave</span><div id="logJoinLeave" class="switch on"></div></div>
|
||||||
<div class="option-card"><span>✏️ Message Edit</span><div id="logMsgEdit" class="switch on"></div></div>
|
<div class="option-card"><span> Message Edit</span><div id="logMsgEdit" class="switch on"></div></div>
|
||||||
<div class="option-card"><span>🗑️ Message Delete</span><div id="logMsgDelete" class="switch on"></div></div>
|
<div class="option-card"><span> Message Delete</span><div id="logMsgDelete" class="switch on"></div></div>
|
||||||
<div class="option-card"><span>🛡️ Automod Actions</span><div id="logAutomod" class="switch on"></div></div>
|
<div class="option-card"><span> Automod Actions</span><div id="logAutomod" class="switch on"></div></div>
|
||||||
<div class="option-card"><span>🎫 Ticket Actions</span><div id="logTickets" class="switch on"></div></div>
|
<div class="option-card"><span> Ticket Actions</span><div id="logTickets" class="switch on"></div></div>
|
||||||
<div class="option-card"><span>🎵 Musik-Events</span><div id="logMusic" class="switch on"></div></div>
|
<div class="option-card"><span> Musik-Events</span><div id="logMusic" class="switch on"></div></div>
|
||||||
<div class="option-card"><span>⚙️ System / Channels</span><div id="logSystem" class="switch on"></div></div>
|
<div class="option-card"><span> System / Channels</span><div id="logSystem" class="switch on"></div></div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:flex; justify-content:flex-end; gap:10px; margin-top:12px;">
|
<div style="display:flex; justify-content:flex-end; gap:10px; margin-top:12px;">
|
||||||
<button id="loggingSave" type="button">Logging speichern</button>
|
<button id="loggingSave" type="button">Logging speichern</button>
|
||||||
@@ -1510,7 +1511,7 @@ router.get('/', (req, res) => {
|
|||||||
actions.className = 'row';
|
actions.className = 'row';
|
||||||
const del = document.createElement('button');
|
const del = document.createElement('button');
|
||||||
del.className = 'danger-btn';
|
del.className = 'danger-btn';
|
||||||
del.textContent = 'Löschen';
|
del.textContent = 'L schen';
|
||||||
del.addEventListener('click', async () => {
|
del.addEventListener('click', async () => {
|
||||||
await deleteService(svc.id);
|
await deleteService(svc.id);
|
||||||
});
|
});
|
||||||
@@ -1568,7 +1569,7 @@ router.get('/', (req, res) => {
|
|||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
await loadStatuspage();
|
await loadStatuspage();
|
||||||
} else {
|
} else {
|
||||||
showToast('Service löschen fehlgeschlagen', true);
|
showToast('Service l schen fehlgeschlagen', true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1846,7 +1847,7 @@ router.get('/', (req, res) => {
|
|||||||
'</div>' +
|
'</div>' +
|
||||||
'<div class=\"ticket-meta\">User: ' +
|
'<div class=\"ticket-meta\">User: ' +
|
||||||
(t.userId || '-') +
|
(t.userId || '-') +
|
||||||
(t.claimedBy ? ' <EFBFBD> Supporter: ' + t.claimedBy : '') +
|
(t.claimedBy ? ' Supporter: ' + t.claimedBy : '') +
|
||||||
'</div>';
|
'</div>';
|
||||||
const select = document.createElement('select');
|
const select = document.createElement('select');
|
||||||
select.innerHTML =
|
select.innerHTML =
|
||||||
@@ -1960,14 +1961,14 @@ router.get('/', (req, res) => {
|
|||||||
edit.addEventListener('click', () => fillAutomationForm(r));
|
edit.addEventListener('click', () => fillAutomationForm(r));
|
||||||
const del = document.createElement('button');
|
const del = document.createElement('button');
|
||||||
del.className = 'danger-btn';
|
del.className = 'danger-btn';
|
||||||
del.textContent = 'L<EFBFBD>schen';
|
del.textContent = 'L schen';
|
||||||
del.addEventListener('click', async () => {
|
del.addEventListener('click', async () => {
|
||||||
const res = await fetch('/api/automations/' + r.id, {
|
const res = await fetch('/api/automations/' + r.id, {
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ guildId: currentGuild })
|
body: JSON.stringify({ guildId: currentGuild })
|
||||||
});
|
});
|
||||||
showToast(res.ok ? 'Regel gel<EFBFBD>scht' : 'L<EFBFBD>schen fehlgeschlagen', !res.ok);
|
showToast(res.ok ? 'Regel gel scht' : 'L schen fehlgeschlagen', !res.ok);
|
||||||
if (res.ok) loadAutomations();
|
if (res.ok) loadAutomations();
|
||||||
});
|
});
|
||||||
actions.appendChild(edit);
|
actions.appendChild(edit);
|
||||||
@@ -2027,14 +2028,14 @@ router.get('/', (req, res) => {
|
|||||||
edit.addEventListener('click', () => fillKbForm(a));
|
edit.addEventListener('click', () => fillKbForm(a));
|
||||||
const del = document.createElement('button');
|
const del = document.createElement('button');
|
||||||
del.className = 'danger-btn';
|
del.className = 'danger-btn';
|
||||||
del.textContent = 'L<EFBFBD>schen';
|
del.textContent = 'L schen';
|
||||||
del.addEventListener('click', async () => {
|
del.addEventListener('click', async () => {
|
||||||
const res = await fetch('/api/kb/' + a.id, {
|
const res = await fetch('/api/kb/' + a.id, {
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ guildId: currentGuild })
|
body: JSON.stringify({ guildId: currentGuild })
|
||||||
});
|
});
|
||||||
showToast(res.ok ? 'Artikel gel<EFBFBD>scht' : 'L<EFBFBD>schen fehlgeschlagen', !res.ok);
|
showToast(res.ok ? 'Artikel gel scht' : 'L schen fehlgeschlagen', !res.ok);
|
||||||
if (res.ok) loadKb();
|
if (res.ok) loadKb();
|
||||||
});
|
});
|
||||||
actions.appendChild(edit);
|
actions.appendChild(edit);
|
||||||
@@ -2207,7 +2208,7 @@ router.get('/', (req, res) => {
|
|||||||
(s.userId || '-') +
|
(s.userId || '-') +
|
||||||
'</strong></div><div class="muted">Ende: ' +
|
'</strong></div><div class="muted">Ende: ' +
|
||||||
formatDate(s.endedAt || Date.now()) +
|
formatDate(s.endedAt || Date.now()) +
|
||||||
' · Dauer: ' +
|
' Dauer: ' +
|
||||||
dur +
|
dur +
|
||||||
'</div>';
|
'</div>';
|
||||||
supportRecentList.appendChild(div);
|
supportRecentList.appendChild(div);
|
||||||
@@ -2265,9 +2266,9 @@ router.get('/', (req, res) => {
|
|||||||
(ev.repeatType || 'none') +
|
(ev.repeatType || 'none') +
|
||||||
'</span></div><div class="ticket-meta">Start: ' +
|
'</span></div><div class="ticket-meta">Start: ' +
|
||||||
formatDate(ev.startTime) +
|
formatDate(ev.startTime) +
|
||||||
' · Channel: ' +
|
' Channel: ' +
|
||||||
(ev.channelId || '-') +
|
(ev.channelId || '-') +
|
||||||
' · Anmeldungen: ' +
|
' Anmeldungen: ' +
|
||||||
(ev._count?.signups ?? 0) +
|
(ev._count?.signups ?? 0) +
|
||||||
'</div>';
|
'</div>';
|
||||||
const actions = document.createElement('div');
|
const actions = document.createElement('div');
|
||||||
|
|||||||
0
tmp_locate.log
Normal file
0
tmp_locate.log
Normal file
Reference in New Issue
Block a user