From c49433147085dead3a710748ca64ece882941a37 Mon Sep 17 00:00:00 2001 From: tresabhi Date: Wed, 26 Apr 2023 23:06:04 +0000 Subject: [PATCH] feat: better wargaming error typing --- src/types/clanDetails.ts | 6 +- src/types/clanList.ts | 4 +- src/types/playerClanData.ts | 32 +++++----- src/types/playerPersonalData.ts | 106 ++++++++++++++++---------------- src/types/players.ts | 4 +- src/types/tanksStats.ts | 69 ++++++++++----------- src/types/wargamingResponse.ts | 11 +++- src/utilities/wargamingError.ts | 21 +++++++ 8 files changed, 134 insertions(+), 119 deletions(-) create mode 100644 src/utilities/wargamingError.ts diff --git a/src/types/clanDetails.ts b/src/types/clanDetails.ts index 333b35674..41f0cf0b7 100644 --- a/src/types/clanDetails.ts +++ b/src/types/clanDetails.ts @@ -29,6 +29,6 @@ export interface ClanDetailsData { description: string; } -export interface ClanDetails extends WargamingResponse { - data: { [accountId: number]: ClanDetailsData }; -} +export type ClanDetails = WargamingResponse<{ + [accountId: number]: ClanDetailsData; +}>; diff --git a/src/types/clanList.ts b/src/types/clanList.ts index c35572f56..7d2f8e53a 100644 --- a/src/types/clanList.ts +++ b/src/types/clanList.ts @@ -8,6 +8,4 @@ export interface Clan { name: string; } -export interface ClanList extends WargamingResponse { - data: Clan[]; -} +export type ClanList = WargamingResponse; diff --git a/src/types/playerClanData.ts b/src/types/playerClanData.ts index 9b22b71bc..3d64d83c4 100644 --- a/src/types/playerClanData.ts +++ b/src/types/playerClanData.ts @@ -1,22 +1,20 @@ import { WargamingResponse } from './wargamingResponse.js'; -export interface PlayerClanData extends WargamingResponse { - data: { - [accountId: number]: { - account_id: number; - joined_at: number; - clan_id: number; - role: string; - account_name: string; +export type PlayerClanData = WargamingResponse<{ + [accountId: number]: { + account_id: number; + joined_at: number; + clan_id: number; + role: string; + account_name: string; - clan?: { - members_count: number; - name: string; - created_at: number; - tag: string; - clan_id: number; - emblem_set_id: number; - }; + clan?: { + members_count: number; + name: string; + created_at: number; + tag: string; + clan_id: number; + emblem_set_id: number; }; }; -} +}>; diff --git a/src/types/playerPersonalData.ts b/src/types/playerPersonalData.ts index e9f7f4aa0..598734e6a 100644 --- a/src/types/playerPersonalData.ts +++ b/src/types/playerPersonalData.ts @@ -1,59 +1,57 @@ import { WargamingResponse } from './wargamingResponse.js'; -export interface PlayerPersonalData extends WargamingResponse { - data: { - [accountId: number]: { - statistics: { - clan: { - spotted: number; - max_frags_tank_id: number; - hits: number; - frags: number; - max_xp: number; - max_xp_tank_id: number; - wins: number; - losses: number; - capture_points: number; - battles: number; - damage_dealt: number; - damage_received: number; - max_frags: number; - shots: number; - frags8p: number; - xp: number; - win_and_survived: number; - survived_battles: number; - dropped_capture_points: number; - }; - all: { - spotted: number; - max_frags_tank_id: number; - hits: number; - frags: number; - max_xp: number; - max_xp_tank_id: number; - wins: number; - losses: number; - capture_points: number; - battles: number; - damage_dealt: number; - damage_received: number; - max_frags: number; - shots: number; - frags8p: number; - xp: number; - win_and_survived: number; - survived_battles: number; - dropped_capture_points: number; - }; - frags: null; +export type PlayerPersonalData = WargamingResponse<{ + [accountId: number]: { + statistics: { + clan: { + spotted: number; + max_frags_tank_id: number; + hits: number; + frags: number; + max_xp: number; + max_xp_tank_id: number; + wins: number; + losses: number; + capture_points: number; + battles: number; + damage_dealt: number; + damage_received: number; + max_frags: number; + shots: number; + frags8p: number; + xp: number; + win_and_survived: number; + survived_battles: number; + dropped_capture_points: number; }; - account_id: number; - created_at: number; - updated_at: number; - private: null; - last_battle_time: number; - nickname: string; + all: { + spotted: number; + max_frags_tank_id: number; + hits: number; + frags: number; + max_xp: number; + max_xp_tank_id: number; + wins: number; + losses: number; + capture_points: number; + battles: number; + damage_dealt: number; + damage_received: number; + max_frags: number; + shots: number; + frags8p: number; + xp: number; + win_and_survived: number; + survived_battles: number; + dropped_capture_points: number; + }; + frags: null; }; + account_id: number; + created_at: number; + updated_at: number; + private: null; + last_battle_time: number; + nickname: string; }; -} +}>; diff --git a/src/types/players.ts b/src/types/players.ts index b5310df65..a2038bef3 100644 --- a/src/types/players.ts +++ b/src/types/players.ts @@ -5,6 +5,4 @@ export interface Player { account_id: number; } -export interface Players extends WargamingResponse { - data: Player[]; -} +export type Players = WargamingResponse; diff --git a/src/types/tanksStats.ts b/src/types/tanksStats.ts index 18cfd5755..1cc24c0ed 100644 --- a/src/types/tanksStats.ts +++ b/src/types/tanksStats.ts @@ -1,38 +1,35 @@ import { WargamingResponse } from './wargamingResponse.js'; -export interface TanksStats extends WargamingResponse { - data: { - [accountId: number]: - | { - all: { - spotted: number; - hits: number; - frags: number; - max_xp: number; - wins: number; - losses: number; - capture_points: number; - battles: number; - damage_dealt: number; - damage_received: number; - max_frags: number; - shots: number; - frags8p: number; - xp: number; - win_and_survived: number; - survived_battles: number; - dropped_capture_points: number; - }; - last_battle_time: number; - account_id: number; - max_xp: number; - in_garage_updated: number; - max_frags: number; - frags: number | null; - mark_of_mastery: number; - battle_life_time: number; - in_garage: number | null; - tank_id: number; - }[]; - }; -} +export type TanksStats = WargamingResponse<{ + [accountId: number]: { + all: { + spotted: number; + hits: number; + frags: number; + max_xp: number; + wins: number; + losses: number; + capture_points: number; + battles: number; + damage_dealt: number; + damage_received: number; + max_frags: number; + shots: number; + frags8p: number; + xp: number; + win_and_survived: number; + survived_battles: number; + dropped_capture_points: number; + }; + last_battle_time: number; + account_id: number; + max_xp: number; + in_garage_updated: number; + max_frags: number; + frags: number | null; + mark_of_mastery: number; + battle_life_time: number; + in_garage: number | null; + tank_id: number; + }[]; +}>; diff --git a/src/types/wargamingResponse.ts b/src/types/wargamingResponse.ts index e23e5f6d6..29d0630c7 100644 --- a/src/types/wargamingResponse.ts +++ b/src/types/wargamingResponse.ts @@ -1,3 +1,8 @@ -export interface WargamingResponse { - status: string; -} +export type WargamingResponse = + | { + status: 'error'; + } + | { + status: 'ok'; + data: Data; + }; diff --git a/src/utilities/wargamingError.ts b/src/utilities/wargamingError.ts new file mode 100644 index 000000000..a3594d7a2 --- /dev/null +++ b/src/utilities/wargamingError.ts @@ -0,0 +1,21 @@ +import { + CacheType, + ChatInputCommandInteraction, + EmbedBuilder, +} from 'discord.js'; +import { NEGATIVE_COLOR } from '../constants/colors.js'; + +export default async function wargamingError( + interaction: ChatInputCommandInteraction, +) { + await interaction.reply({ + embeds: [ + new EmbedBuilder() + .setColor(NEGATIVE_COLOR) + .setTitle('Skilled Bot ran into an issue') + .setDescription('Wargaming returned an error. Please try again later.'), + ], + }); + + console.log('Wargaming returned an error.'); +}