diff --git a/src/webpage/guild.ts b/src/webpage/guild.ts index a3f079a..ef5f3d6 100644 --- a/src/webpage/guild.ts +++ b/src/webpage/guild.ts @@ -32,6 +32,8 @@ import {ProgessiveDecodeJSON} from "./utils/progessiveLoad.js"; import {MarkDown} from "./markdown.js"; import {Command} from "./interactions/commands.js"; import {Hover} from "./hover.js"; +import {ReportMenu} from "./reporting/report.js"; +import {getDeveloperSettings} from "./utils/storage/devSettings.js"; export async function makeInviteMenu(inviteMenu: Options, guild: Guild, url: string) { const invDiv = document.createElement("div"); const bansp = ProgessiveDecodeJSON(url, { @@ -311,6 +313,20 @@ class Guild extends SnowFlake { navigator.clipboard.writeText(this.id); }, ); + Guild.contextmenu.addButton( + () => I18n.guild.report(), + async function () { + const menu = await ReportMenu.makeReport("guild", this.localuser, {guild: this}); + menu?.spawnMenu(); + }, + { + visible: function () { + const settings = getDeveloperSettings(); + return this.properties.owner_id !== this.localuser.user.id && settings.reportSystem; + }, + color: "red", + }, + ); //TODO mute guild button } get muted() { diff --git a/src/webpage/reporting/report.ts b/src/webpage/reporting/report.ts index 881d853..c686621 100644 --- a/src/webpage/reporting/report.ts +++ b/src/webpage/reporting/report.ts @@ -15,6 +15,7 @@ import { reportPut, reportTypes, reportUserPut, + reportGuildPut, } from "./types.js"; interface InfoMap { message?: Message; @@ -127,6 +128,17 @@ export class ReportMenu { realBody = m; break; } + case "guild": { + const guild = this.infoMap.guild; + if (!guild) throw new Error("Guild expected"); + const m: reportGuildPut = { + ...obj, + name: "guild", + guild_id: guild.id, + }; + realBody = m; + break; + } } const res = await fetch(this.postback_url, { method: "POST", @@ -480,6 +492,26 @@ class ReportElement { div.append(span); break; } + case "text": { + const h4 = document.createElement("h4"); + h4.textContent = json.data.header; + const p = document.createElement("p"); + p.textContent = json.data.body; + div.append(h4, p); + break; + } + case "guild_preview": { + const guild = map.guild; + if (!guild) return; + const guildDiv = document.createElement("div"); + guildDiv.classList.add("flexltr"); + guildDiv.append(guild.generateGuildIcon(false)); + const title = document.createElement("h4"); + title.textContent = guild.properties.name; + guildDiv.append(title); + div.append(guildDiv); + break; + } default: console.log(json); div.textContent = this.json.type; diff --git a/src/webpage/reporting/types.ts b/src/webpage/reporting/types.ts index 4788e41..6bd8dfa 100644 --- a/src/webpage/reporting/types.ts +++ b/src/webpage/reporting/types.ts @@ -259,7 +259,7 @@ interface reportGuildDirPut extends reportPut { guild_id: string; name: "guild_directory_entry"; } -interface reportGuildPut extends reportPut { +export interface reportGuildPut extends reportPut { guild_id: string; name: "guild"; } diff --git a/translations/en.json b/translations/en.json index 0b056d0..e4fde0a 100644 --- a/translations/en.json +++ b/translations/en.json @@ -247,6 +247,7 @@ "owner": "Find the owner", "permission": "Permissions:" }, + "report":"Report Guild", "admins": "Find Admins", "all": "all", "banReason": "Ban reason: $1",