chore: refresh gramsrv public release
This commit is contained in:
parent
75cebe8dbf
commit
70b6820474
1274 changed files with 378751 additions and 59919 deletions
56
cmd/telesrv-admin/web/src/lib/format.ts
Normal file
56
cmd/telesrv-admin/web/src/lib/format.ts
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
import type { AccountRow, ChannelRow } from "../types";
|
||||
|
||||
export function displayPhone(value: string): string {
|
||||
const phone = value.trim();
|
||||
if (!phone || phone.startsWith("+")) return phone;
|
||||
return /^\d+$/.test(phone) ? `+${phone}` : phone;
|
||||
}
|
||||
|
||||
export function displayUsername(value: string): string {
|
||||
const username = value.trim();
|
||||
if (!username) return "";
|
||||
return username.startsWith("@") ? username : `@${username}`;
|
||||
}
|
||||
|
||||
export function displayName(row: Pick<AccountRow, "FirstName" | "LastName">): string {
|
||||
return `${row.FirstName || ""} ${row.LastName || ""}`.trim() || "-";
|
||||
}
|
||||
|
||||
export function channelKind(ch: ChannelRow): string {
|
||||
if (ch.Broadcast && !ch.Megagroup) return "频道";
|
||||
if (ch.Megagroup && ch.Forum) return "超级群/论坛";
|
||||
if (ch.Megagroup) return "超级群";
|
||||
return "频道/群";
|
||||
}
|
||||
|
||||
export function formatDate(value: string): string {
|
||||
if (!value || value.startsWith("0001-")) return "";
|
||||
const date = new Date(value);
|
||||
if (Number.isNaN(date.getTime())) return "";
|
||||
return date.toLocaleString();
|
||||
}
|
||||
|
||||
export function formatUnix(value: number): string {
|
||||
if (!value || value <= 0) return "";
|
||||
const date = new Date(value * 1000);
|
||||
if (Number.isNaN(date.getTime())) return "";
|
||||
return date.toLocaleString();
|
||||
}
|
||||
|
||||
export function toInt(value: string): number {
|
||||
if (!value.trim()) return 0;
|
||||
const parsed = Number.parseInt(value, 10);
|
||||
return Number.isFinite(parsed) ? parsed : 0;
|
||||
}
|
||||
|
||||
export function parseIDs(value: string): number[] {
|
||||
const ids = value
|
||||
.split(/[\s,]+/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean)
|
||||
.map((item) => Number.parseInt(item, 10));
|
||||
if (ids.length === 0 || ids.some((id) => !Number.isFinite(id) || id <= 0)) {
|
||||
throw new Error("msg ids invalid");
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
25
cmd/telesrv-admin/web/src/lib/metrics.ts
Normal file
25
cmd/telesrv-admin/web/src/lib/metrics.ts
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
import type { AccountRow, ChannelRow } from "../types";
|
||||
|
||||
export function accountMetrics(rows: AccountRow[]) {
|
||||
return rows.reduce(
|
||||
(acc, row) => {
|
||||
acc.devices += row.DeviceCount;
|
||||
if (row.PremiumUntil > 0) acc.premium += 1;
|
||||
if (row.Frozen) acc.frozen += 1;
|
||||
return acc;
|
||||
},
|
||||
{ devices: 0, premium: 0, frozen: 0 }
|
||||
);
|
||||
}
|
||||
|
||||
export function channelMetrics(rows: ChannelRow[]) {
|
||||
return rows.reduce(
|
||||
(acc, row) => {
|
||||
if (row.Megagroup) acc.megagroups += 1;
|
||||
if (row.Broadcast) acc.broadcasts += 1;
|
||||
if (row.Verified) acc.verified += 1;
|
||||
return acc;
|
||||
},
|
||||
{ megagroups: 0, broadcasts: 0, verified: 0 }
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue