mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 11:39:50 +02:00
feat: today embeds
This commit is contained in:
1 parent
8f6388b42b
commit
438feefa83
8 files changed
+48
-10
No files matched your search
@@ -1,4 +1,5 @@
|
|||||||
import { SlashCommandBuilder } from 'discord.js';
|
import { SlashCommandBuilder } from 'discord.js';
|
||||||
|
import { CYCLIC_API } from '../constants/cyclic.js';
|
||||||
import getWargamingResponse from '../core/blitz/getWargamingResponse.js';
|
import getWargamingResponse from '../core/blitz/getWargamingResponse.js';
|
||||||
import addUsernameChoices from '../core/discord/addUsernameChoices.js';
|
import addUsernameChoices from '../core/discord/addUsernameChoices.js';
|
||||||
import autocompleteUsername from '../core/discord/autocompleteUsername.js';
|
import autocompleteUsername from '../core/discord/autocompleteUsername.js';
|
||||||
@@ -34,7 +35,7 @@ export const todayCommand: CommandRegistry = {
|
|||||||
return [
|
return [
|
||||||
await today(player),
|
await today(player),
|
||||||
primaryButton(path, 'Refresh'),
|
primaryButton(path, 'Refresh'),
|
||||||
// linkButton(`${CYCLIC_API}/${path}`, 'Embed'),
|
linkButton(`${CYCLIC_API}/${path}`, 'Embed'),
|
||||||
linkButton(
|
linkButton(
|
||||||
`https://www.blitzstars.com/player/${player.server}/${nickname}`,
|
`https://www.blitzstars.com/player/${player.server}/${nickname}`,
|
||||||
'BlitzStars',
|
'BlitzStars',
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import getWN8Percentile from '../../../core/blitz/getWN8Percentile.js';
|
import getWN8Percentile from '../../../core/blitz/getWN8Percentile.js';
|
||||||
import { theme } from '../../../stitches.config.js';
|
import { theme, themeTransparent } from '../../../stitches.config.js';
|
||||||
import { RowDiscriminator } from './RowDiscriminator.js';
|
import { RowDiscriminator } from './RowDiscriminator.js';
|
||||||
import { RowStat } from './RowStat.js';
|
import { RowStat } from './RowStat.js';
|
||||||
|
|
||||||
@@ -16,6 +16,7 @@ export interface RowProps {
|
|||||||
icon?: string;
|
icon?: string;
|
||||||
minimized: boolean;
|
minimized: boolean;
|
||||||
isListing: boolean;
|
isListing: boolean;
|
||||||
|
naked?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Row({
|
export function Row({
|
||||||
@@ -31,6 +32,7 @@ export function Row({
|
|||||||
battles,
|
battles,
|
||||||
careerBattles,
|
careerBattles,
|
||||||
icon,
|
icon,
|
||||||
|
naked,
|
||||||
}: RowProps) {
|
}: RowProps) {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@@ -38,7 +40,11 @@ export function Row({
|
|||||||
display: 'flex',
|
display: 'flex',
|
||||||
borderRadius: 4,
|
borderRadius: 4,
|
||||||
backgroundColor: isListing
|
backgroundColor: isListing
|
||||||
? theme.colors.componentInteractive
|
? naked
|
||||||
|
? themeTransparent.colors.componentInteractive
|
||||||
|
: theme.colors.componentInteractive
|
||||||
|
: naked
|
||||||
|
? themeTransparent.colors.appBackground2
|
||||||
: theme.colors.appBackground2,
|
: theme.colors.appBackground2,
|
||||||
padding: 8,
|
padding: 8,
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ import { theme } from '../stitches.config.js';
|
|||||||
|
|
||||||
export interface WrapperProps {
|
export interface WrapperProps {
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
|
naked?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Wrapper({ children }: WrapperProps) {
|
export default function Wrapper({ children, naked }: WrapperProps) {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
@@ -14,8 +15,11 @@ export default function Wrapper({ children }: WrapperProps) {
|
|||||||
padding: 16,
|
padding: 16,
|
||||||
gap: 32,
|
gap: 32,
|
||||||
width: 640,
|
width: 640,
|
||||||
background: 'url(https://i.imgur.com/PhS06NJ.png)',
|
|
||||||
color: theme.colors.textHighContrast,
|
color: theme.colors.textHighContrast,
|
||||||
|
|
||||||
|
...(!naked && {
|
||||||
|
background: 'url(https://i.imgur.com/PhS06NJ.png)',
|
||||||
|
}),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ export default async function stats<Type extends StatType>(
|
|||||||
);
|
);
|
||||||
|
|
||||||
return naked ? (
|
return naked ? (
|
||||||
overview
|
<Wrapper naked>{overview}</Wrapper>
|
||||||
) : (
|
) : (
|
||||||
<Wrapper>
|
<Wrapper>
|
||||||
<TitleBar
|
<TitleBar
|
||||||
|
|||||||
+10
-2
@@ -20,7 +20,10 @@ import { AccountInfo, AllStats } from '../types/accountInfo.js';
|
|||||||
import { PlayerClanData } from '../types/playerClanData.js';
|
import { PlayerClanData } from '../types/playerClanData.js';
|
||||||
import { PossiblyPromise } from '../types/possiblyPromise.js';
|
import { PossiblyPromise } from '../types/possiblyPromise.js';
|
||||||
|
|
||||||
export default async function today({ server, id }: ResolvedPlayer) {
|
export default async function today(
|
||||||
|
{ server, id }: ResolvedPlayer,
|
||||||
|
naked?: boolean,
|
||||||
|
) {
|
||||||
const { diffed, order } = await getDiffedTankStats(
|
const { diffed, order } = await getDiffedTankStats(
|
||||||
server,
|
server,
|
||||||
id,
|
id,
|
||||||
@@ -117,6 +120,7 @@ export default async function today({ server, id }: ResolvedPlayer) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Breakdown.Row
|
<Breakdown.Row
|
||||||
|
naked={naked}
|
||||||
isListing={tankId !== 0}
|
isListing={tankId !== 0}
|
||||||
minimized={index > 4}
|
minimized={index > 4}
|
||||||
key={tankId}
|
key={tankId}
|
||||||
@@ -142,7 +146,11 @@ export default async function today({ server, id }: ResolvedPlayer) {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return naked ? (
|
||||||
|
<Wrapper naked>
|
||||||
|
<Breakdown.Root>{rows.slice(1)}</Breakdown.Root>
|
||||||
|
</Wrapper>
|
||||||
|
) : (
|
||||||
<Wrapper>
|
<Wrapper>
|
||||||
<TitleBar
|
<TitleBar
|
||||||
name={accountInfo[id].nickname}
|
name={accountInfo[id].nickname}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import resolvePlayerFromRequest from '../core/express/resolvePlayerFromRequest.js';
|
||||||
|
import today from '../renderers/today.js';
|
||||||
|
import { RouteRegistry } from '../server.js';
|
||||||
|
|
||||||
|
export const todayRoute: RouteRegistry = {
|
||||||
|
route: '/today',
|
||||||
|
inProduction: true,
|
||||||
|
inDevelopment: true,
|
||||||
|
|
||||||
|
async handler(req) {
|
||||||
|
const player = resolvePlayerFromRequest(req);
|
||||||
|
|
||||||
|
return await today(player, true);
|
||||||
|
},
|
||||||
|
};
|
||||||
+2
-1
@@ -4,6 +4,7 @@ import withAutoRefresh from './core/express/withAutoRefresh.js';
|
|||||||
import isDev from './core/node/isDev.js';
|
import isDev from './core/node/isDev.js';
|
||||||
import { Registry } from './events/interactionCreate/index.js';
|
import { Registry } from './events/interactionCreate/index.js';
|
||||||
import { statsRoute } from './routes/stats.js';
|
import { statsRoute } from './routes/stats.js';
|
||||||
|
import { todayRoute } from './routes/today.js';
|
||||||
|
|
||||||
export type RouteReturnable = JSX.Element | Promise<JSX.Element>;
|
export type RouteReturnable = JSX.Element | Promise<JSX.Element>;
|
||||||
|
|
||||||
@@ -20,7 +21,7 @@ export interface RouteRegistry<HandlesInteraction extends boolean = false>
|
|||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
([statsRoute] as RouteRegistry[]).forEach((registry) => {
|
([statsRoute, todayRoute] as RouteRegistry[]).forEach((registry) => {
|
||||||
if (!(isDev() ? registry.inDevelopment : registry.inProduction)) return;
|
if (!(isDev() ? registry.inDevelopment : registry.inProduction)) return;
|
||||||
|
|
||||||
app.get(registry.route, async (req, res) => {
|
app.get(registry.route, async (req, res) => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { amberDark, slate, slateDark } from '@radix-ui/colors';
|
import { amberDark, slate, slateDark, slateDarkA } from '@radix-ui/colors';
|
||||||
import { createBorderStyles, createColors } from 'bepaint';
|
import { createBorderStyles, createColors } from 'bepaint';
|
||||||
|
|
||||||
// this isn't really a stitches config, but the object is compliant
|
// this isn't really a stitches config, but the object is compliant
|
||||||
@@ -6,5 +6,8 @@ export const theme = {
|
|||||||
colors: createColors(slateDark),
|
colors: createColors(slateDark),
|
||||||
borderStyles: createBorderStyles(slateDark),
|
borderStyles: createBorderStyles(slateDark),
|
||||||
};
|
};
|
||||||
|
export const themeTransparent = {
|
||||||
|
colors: createColors(slateDarkA),
|
||||||
|
};
|
||||||
export const themeLight = { colors: createColors(slate) };
|
export const themeLight = { colors: createColors(slate) };
|
||||||
export const themeAmber = { colors: createColors(amberDark) };
|
export const themeAmber = { colors: createColors(amberDark) };
|
||||||
Reference in new issue
Block a user