feat: today embeds

This commit is contained in:
TresAbhi committed 2023-07-10 01:44:05 +00:00
1 parent 8f6388b42b
commit 438feefa83
8 files changed
+48 -10

No files matched your search

+2 -1
View File
@@ -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',
+8 -2
View File
@@ -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,
}} }}
+6 -2
View File
@@ -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}
+1 -1
View File
@@ -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
View File
@@ -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}
+15
View File
@@ -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
View File
@@ -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) => {
+4 -1
View File
@@ -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) };