(ban: banObj)
| 1050 | method: "PUT", |
| 1051 | headers, |
| 1052 | }); |
| 1053 | if (!ret.ok) { |
| 1054 | new Dialog((await ret.json()).message).show(); |
| 1055 | return; |
| 1056 | } |
| 1057 | banMenu.returnFromSub(); |
| 1058 | }); |
| 1059 | opt.addButtonInput("", I18n.submit(), () => { |
| 1060 | opt.submit(); |
| 1061 | }); |
| 1062 | }); |
| 1063 | const makeBanMenu = () => { |
| 1064 | const banDiv = document.createElement("div"); |
| 1065 | const bansp = ProgessiveDecodeJSON<banObj[]>( |
| 1066 | this.info.api + "/guilds/" + this.id + "/bans", |
| 1067 | { |
| 1068 | headers: this.headers, |
| 1069 | }, |
| 1070 | ); |
| 1071 | const createBanHTML = (ban: banObj) => { |
| 1072 | const div = document.createElement("div"); |
| 1073 | div.classList.add("flexltr", "bandiv"); |
| 1074 | let src: string; |
| 1075 | if (ban.user.avatar !== null) { |
| 1076 | src = |
| 1077 | `${this.info.cdn}/avatars/${ban.user.id}/${ban.user.avatar}.png` + |
| 1078 | new CDNParams({expectedSize: 96}); |
| 1079 | } else { |
| 1080 | const int = Number((BigInt(ban.user.id) >> 22n) % 6n); |
| 1081 | src = `${this.info.cdn}/embed/avatars/${int}.png`; |
| 1082 | } |
| 1083 | const img = createImg(src); |
| 1084 | img.classList.add("pfp"); |
| 1085 | const divUserRes = document.createElement("div"); |
| 1086 | divUserRes.classList.add("flexttb"); |
| 1087 | |
| 1088 | const username = document.createElement("span"); |
| 1089 | username.textContent = ban.user.username; |
| 1090 | |
| 1091 | divUserRes.append(username); |
| 1092 | if (ban.reason) { |
| 1093 | const reason = document.createElement("span"); |
| 1094 | reason.innerText = ban.reason; |
| 1095 | divUserRes.append(I18n.guild.banReason(ban.reason)); |
| 1096 | } |
| 1097 | div.append(img, divUserRes); |
| 1098 | div.onclick = async (_) => { |
| 1099 | const opt = banMenu.addSubOptions(ban.user.username); |
| 1100 | |
| 1101 | opt.addHTMLArea(img.cloneNode(true) as HTMLElement); |
| 1102 | opt.addText(ban.user.username); |
| 1103 | if (ban.reason) opt.addText(I18n.guild.banReason(ban.reason)); |
| 1104 | //FIXME the API sends back the wrong response, so I don't have this info |
| 1105 | /* |
| 1106 | const moreInfo = (await ( |
| 1107 | await fetch(this.info.api + "/guilds/" + this.id + "/bans/" + ban.user.id, { |
| 1108 | headers: this.headers, |
| 1109 | }) |
nothing calls this directly
no test coverage detected