From 73a04cdcba7e0639a1940e544232254b9d151d45 Mon Sep 17 00:00:00 2001 From: Guangcong Luo Date: Wed, 26 Feb 2025 14:38:32 -0800 Subject: [PATCH] TypeScript: Enable noImplicitOverride --- data/random-battles/gen1/teams.ts | 10 ++--- data/random-battles/gen2/teams.ts | 10 ++--- data/random-battles/gen3/teams.ts | 16 ++++---- data/random-battles/gen4/teams.ts | 16 ++++---- data/random-battles/gen5/teams.ts | 18 ++++----- data/random-battles/gen6/teams.ts | 22 +++++------ data/random-battles/gen7/teams.ts | 22 +++++------ data/random-battles/gen7apex/teams.ts | 2 +- data/random-battles/gen7letsgo/teams.ts | 8 ++-- data/random-battles/gen8bdsp/teams.ts | 12 +++--- data/random-battles/gen9baby/teams.ts | 18 ++++----- data/random-battles/gen9cap/teams.ts | 4 +- lib/fs.ts | 4 +- lib/net.ts | 6 +-- lib/process-manager.ts | 12 +++--- lib/sql.ts | 2 +- lib/streams.ts | 12 +++--- lib/utils.ts | 2 +- server/artemis/local.ts | 4 +- server/chat-plugins/announcements.ts | 2 +- server/chat-plugins/auction.ts | 6 +-- server/chat-plugins/chatlog.ts | 2 +- server/chat-plugins/hangman.ts | 4 +- server/chat-plugins/helptickets.ts | 12 +++--- server/chat-plugins/mafia.ts | 12 +++--- server/chat-plugins/poll.ts | 4 +- server/chat-plugins/scavengers.ts | 24 ++++++------ server/chat-plugins/trivia/trivia.ts | 52 ++++++++++++------------- server/chat-plugins/wifi.tsx | 16 ++++---- server/chat-plugins/youtube.ts | 4 +- server/ladders-challenges.ts | 2 +- server/punishments.ts | 4 +- server/room-battle-bestof.ts | 2 +- server/rooms.ts | 8 ++-- server/sockets.ts | 2 +- server/tournaments/index.ts | 14 +++---- server/user-groups.ts | 14 +++---- server/users.ts | 6 +-- sim/battle-stream.ts | 10 ++--- sim/dex-data.ts | 2 +- sim/dex-formats.ts | 2 +- sim/tools/exhaustive-runner.ts | 6 +-- sim/tools/random-player-ai.ts | 2 +- sim/tools/runner.ts | 2 +- tsconfig.json | 2 +- 45 files changed, 208 insertions(+), 208 deletions(-) diff --git a/data/random-battles/gen1/teams.ts b/data/random-battles/gen1/teams.ts index 4dc233943d..a1e89ae510 100644 --- a/data/random-battles/gen1/teams.ts +++ b/data/random-battles/gen1/teams.ts @@ -15,10 +15,10 @@ interface Gen1RandomBattleSpecies { } export class RandomGen1Teams extends RandomGen2Teams { - randomData: { [species: IDEntry]: Gen1RandomBattleSpecies } = require('./data.json'); + override randomData: { [species: IDEntry]: Gen1RandomBattleSpecies } = require('./data.json'); // Challenge Cup or CC teams are basically fully random teams. - randomCCTeam() { + override randomCCTeam() { this.enforceNoDirectCustomBanlistChanges(); const team = []; @@ -103,7 +103,7 @@ export class RandomGen1Teams extends RandomGen2Teams { } // Random team generation for Gen 1 Random Battles. - randomTeam() { + override randomTeam() { this.enforceNoDirectCustomBanlistChanges(); // Get what we need ready. @@ -219,7 +219,7 @@ export class RandomGen1Teams extends RandomGen2Teams { /** * Random set generation for Gen 1 Random Battles. */ - randomSet(species: string | Species): RandomTeamsTypes.RandomSet { + override randomSet(species: string | Species): RandomTeamsTypes.RandomSet { species = this.dex.species.get(species); if (!species.exists) species = this.dex.species.get('pikachu'); // Because Gen 1. @@ -299,7 +299,7 @@ export class RandomGen1Teams extends RandomGen2Teams { }; } - randomHCTeam(): PokemonSet[] { + override randomHCTeam(): PokemonSet[] { this.enforceNoDirectCustomBanlistChanges(); const team = []; diff --git a/data/random-battles/gen2/teams.ts b/data/random-battles/gen2/teams.ts index 60ee0bb51b..36022fc378 100644 --- a/data/random-battles/gen2/teams.ts +++ b/data/random-battles/gen2/teams.ts @@ -26,7 +26,7 @@ const MOVE_PAIRS = [ ]; export class RandomGen2Teams extends RandomGen3Teams { - randomSets: { [species: IDEntry]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); + override randomSets: { [species: IDEntry]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -47,7 +47,7 @@ export class RandomGen2Teams extends RandomGen3Teams { }; } - cullMovePool( + override cullMovePool( types: string[], moves: Set, abilities = {}, @@ -138,7 +138,7 @@ export class RandomGen2Teams extends RandomGen3Teams { } // Generate random moveset for a given species, role, preferred type. - randomMoveset( + override randomMoveset( types: string[], abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -349,7 +349,7 @@ export class RandomGen2Teams extends RandomGen3Teams { return moves; } - getItem( + override getItem( ability: string, types: string[], moves: Set, @@ -378,7 +378,7 @@ export class RandomGen2Teams extends RandomGen3Teams { return 'Leftovers'; } - randomSet( + override randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false diff --git a/data/random-battles/gen3/teams.ts b/data/random-battles/gen3/teams.ts index b11a05d220..0675d4dc27 100644 --- a/data/random-battles/gen3/teams.ts +++ b/data/random-battles/gen3/teams.ts @@ -30,7 +30,7 @@ export class RandomGen3Teams extends RandomGen4Teams { battleHasDitto: boolean; battleHasWobbuffet: boolean; - randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -60,7 +60,7 @@ export class RandomGen3Teams extends RandomGen4Teams { }; } - cullMovePool( + override cullMovePool( types: string[], moves: Set, abilities: string[], @@ -164,7 +164,7 @@ export class RandomGen3Teams extends RandomGen4Teams { } // Generate random moveset for a given species, role, preferred type. - randomMoveset( + override randomMoveset( types: string[], abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -386,7 +386,7 @@ export class RandomGen3Teams extends RandomGen4Teams { return moves; } - shouldCullAbility( + override shouldCullAbility( ability: string, types: Set, moves: Set, @@ -410,7 +410,7 @@ export class RandomGen3Teams extends RandomGen4Teams { return false; } - getAbility( + override getAbility( types: Set, moves: Set, abilities: string[], @@ -449,7 +449,7 @@ export class RandomGen3Teams extends RandomGen4Teams { return this.sample(abilities); } - getItem( + override getItem( ability: string, types: string[], moves: Set, @@ -520,7 +520,7 @@ export class RandomGen3Teams extends RandomGen4Teams { return 'Leftovers'; } - randomSet( + override randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false @@ -635,7 +635,7 @@ export class RandomGen3Teams extends RandomGen4Teams { }; } - randomTeam() { + override randomTeam() { this.enforceNoDirectCustomBanlistChanges(); const seed = this.prng.getSeed(); diff --git a/data/random-battles/gen4/teams.ts b/data/random-battles/gen4/teams.ts index 6ab4569548..eb4e88d935 100644 --- a/data/random-battles/gen4/teams.ts +++ b/data/random-battles/gen4/teams.ts @@ -42,7 +42,7 @@ const PRIORITY_POKEMON = [ ]; export class RandomGen4Teams extends RandomGen5Teams { - randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -81,7 +81,7 @@ export class RandomGen4Teams extends RandomGen5Teams { .map(move => move.id); } - cullMovePool( + override cullMovePool( types: string[], moves: Set, abilities: string[], @@ -229,7 +229,7 @@ export class RandomGen4Teams extends RandomGen5Teams { } // Generate random moveset for a given species, role, preferred type. - randomMoveset( + override randomMoveset( types: string[], abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -464,7 +464,7 @@ export class RandomGen4Teams extends RandomGen5Teams { return moves; } - shouldCullAbility( + override shouldCullAbility( ability: string, types: Set, moves: Set, @@ -490,7 +490,7 @@ export class RandomGen4Teams extends RandomGen5Teams { return false; } - getAbility( + override getAbility( types: Set, moves: Set, abilities: string[], @@ -530,7 +530,7 @@ export class RandomGen4Teams extends RandomGen5Teams { return this.sample(abilities); } - getPriorityItem( + override getPriorityItem( ability: string, types: string[], moves: Set, @@ -571,7 +571,7 @@ export class RandomGen4Teams extends RandomGen5Teams { if (role === 'Staller') return 'Leftovers'; } - getItem( + override getItem( ability: string, types: string[], moves: Set, @@ -646,7 +646,7 @@ export class RandomGen4Teams extends RandomGen5Teams { return 'Leftovers'; } - randomSet( + override randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false diff --git a/data/random-battles/gen5/teams.ts b/data/random-battles/gen5/teams.ts index aca7646ea4..5835cd1546 100644 --- a/data/random-battles/gen5/teams.ts +++ b/data/random-battles/gen5/teams.ts @@ -51,7 +51,7 @@ const PRIORITY_POKEMON = [ ]; export class RandomGen5Teams extends RandomGen6Teams { - randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); constructor(format: string | Format, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -95,7 +95,7 @@ export class RandomGen5Teams extends RandomGen6Teams { .map(move => move.id); } - cullMovePool( + override cullMovePool( types: string[], moves: Set, abilities: string[], @@ -249,7 +249,7 @@ export class RandomGen5Teams extends RandomGen6Teams { } // Generate random moveset for a given species, role, preferred type. - randomMoveset( + override randomMoveset( types: string[], abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -491,7 +491,7 @@ export class RandomGen5Teams extends RandomGen6Teams { return moves; } - shouldCullAbility( + override shouldCullAbility( ability: string, types: Set, moves: Set, @@ -521,7 +521,7 @@ export class RandomGen5Teams extends RandomGen6Teams { return false; } - getAbility( + override getAbility( types: Set, moves: Set, abilities: string[], @@ -564,7 +564,7 @@ export class RandomGen5Teams extends RandomGen6Teams { return this.sample(abilities); } - getPriorityItem( + override getPriorityItem( ability: string, types: string[], moves: Set, @@ -614,7 +614,7 @@ export class RandomGen5Teams extends RandomGen6Teams { if (role === 'Staller') return 'Leftovers'; } - getItem( + override getItem( ability: string, types: string[], moves: Set, @@ -699,7 +699,7 @@ export class RandomGen5Teams extends RandomGen6Teams { return 'Leftovers'; } - randomSet( + override randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false @@ -840,7 +840,7 @@ export class RandomGen5Teams extends RandomGen6Teams { }; } - randomTeam() { + override randomTeam() { this.enforceNoDirectCustomBanlistChanges(); const seed = this.prng.getSeed(); diff --git a/data/random-battles/gen6/teams.ts b/data/random-battles/gen6/teams.ts index 054974ae8a..510c5f5c99 100644 --- a/data/random-battles/gen6/teams.ts +++ b/data/random-battles/gen6/teams.ts @@ -62,7 +62,7 @@ const PRIORITY_POKEMON = [ ]; export class RandomGen6Teams extends RandomGen7Teams { - randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -108,7 +108,7 @@ export class RandomGen6Teams extends RandomGen7Teams { .map(move => move.id); } - cullMovePool( + override cullMovePool( types: string[], moves: Set, abilities: string[], @@ -284,7 +284,7 @@ export class RandomGen6Teams extends RandomGen7Teams { } // Generate random moveset for a given species, role, preferred type. - randomMoveset( + override randomMoveset( types: string[], abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -527,7 +527,7 @@ export class RandomGen6Teams extends RandomGen7Teams { return moves; } - shouldCullAbility( + override shouldCullAbility( ability: string, types: Set, moves: Set, @@ -561,7 +561,7 @@ export class RandomGen6Teams extends RandomGen7Teams { return false; } - getAbility( + override getAbility( types: Set, moves: Set, abilities: string[], @@ -607,7 +607,7 @@ export class RandomGen6Teams extends RandomGen7Teams { return this.sample(abilities); } - getPriorityItem( + override getPriorityItem( ability: string, types: string[], moves: Set, @@ -664,7 +664,7 @@ export class RandomGen6Teams extends RandomGen7Teams { if (role === 'Staller') return 'Leftovers'; } - getItem( + override getItem( ability: string, types: string[], moves: Set, @@ -757,7 +757,7 @@ export class RandomGen6Teams extends RandomGen7Teams { return 'Leftovers'; } - randomSet( + override randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false @@ -889,9 +889,9 @@ export class RandomGen6Teams extends RandomGen7Teams { }; } - randomFactorySets: { [format: string]: { [species: string]: BattleFactorySpecies } } = require('./factory-sets.json'); + override randomFactorySets: { [format: string]: { [species: string]: BattleFactorySpecies } } = require('./factory-sets.json'); - randomFactorySet( + override randomFactorySet( species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails, tier: string @@ -980,7 +980,7 @@ export class RandomGen6Teams extends RandomGen7Teams { }; } - randomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] { + override randomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] { this.enforceNoDirectCustomBanlistChanges(); const forceResult = (depth >= 12); diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts index 8a7b818d6d..3e3c301f1a 100644 --- a/data/random-battles/gen7/teams.ts +++ b/data/random-battles/gen7/teams.ts @@ -716,7 +716,7 @@ export class RandomGen7Teams extends RandomGen8Teams { return moves; } - shouldCullAbility( + override shouldCullAbility( ability: string, types: Set, moves: Set, @@ -752,7 +752,7 @@ export class RandomGen7Teams extends RandomGen8Teams { return false; } - getAbility( + override getAbility( types: Set, moves: Set, abilities: string[], @@ -981,7 +981,7 @@ export class RandomGen7Teams extends RandomGen8Teams { return 'Leftovers'; } - getLevel(species: Species): number { + override getLevel(species: Species): number { // level set by rules if (this.adjustLevel) return this.adjustLevel; if (this.gen >= 2) { @@ -1013,7 +1013,7 @@ export class RandomGen7Teams extends RandomGen8Teams { return 80; } - randomSet( + override randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false @@ -1178,7 +1178,7 @@ export class RandomGen7Teams extends RandomGen8Teams { }; } - randomTeam() { + override randomTeam() { this.enforceNoDirectCustomBanlistChanges(); const seed = this.prng.getSeed(); @@ -1382,9 +1382,9 @@ export class RandomGen7Teams extends RandomGen8Teams { return pokemon; } - randomFactorySets: { [format: string]: { [species: string]: BattleFactorySpecies } } = require('./factory-sets.json'); + override randomFactorySets: { [format: string]: { [species: string]: BattleFactorySpecies } } = require('./factory-sets.json'); - randomFactorySet( + override randomFactorySet( species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails, tier: string ): RandomTeamsTypes.RandomFactorySet | null { const id = toID(species.name); @@ -1503,7 +1503,7 @@ export class RandomGen7Teams extends RandomGen8Teams { }; } - randomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] { + override randomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] { this.enforceNoDirectCustomBanlistChanges(); const forceResult = (depth >= 12); @@ -1700,9 +1700,9 @@ export class RandomGen7Teams extends RandomGen8Teams { return pokemon; } - randomBSSFactorySets: AnyObject = require('./bss-factory-sets.json'); + override randomBSSFactorySets: AnyObject = require('./bss-factory-sets.json'); - randomBSSFactorySet( + override randomBSSFactorySet( species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails ): RandomTeamsTypes.RandomFactorySet | null { const id = toID(species.name); @@ -1792,7 +1792,7 @@ export class RandomGen7Teams extends RandomGen8Teams { }; } - randomBSSFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] { + override randomBSSFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] { this.enforceNoDirectCustomBanlistChanges(); const forceResult = (depth >= 4); diff --git a/data/random-battles/gen7apex/teams.ts b/data/random-battles/gen7apex/teams.ts index cdfac40c97..87f460b589 100644 --- a/data/random-battles/gen7apex/teams.ts +++ b/data/random-battles/gen7apex/teams.ts @@ -15,7 +15,7 @@ const POWERFUL_ABILITIES = [ ]; export class RandomGen7ApexTeams extends RandomGen7Teams { - randomSet( + override randomSet( species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false diff --git a/data/random-battles/gen7letsgo/teams.ts b/data/random-battles/gen7letsgo/teams.ts index fc5dc518d7..befaa7eeb0 100644 --- a/data/random-battles/gen7letsgo/teams.ts +++ b/data/random-battles/gen7letsgo/teams.ts @@ -2,7 +2,7 @@ import type { PRNG } from '../../../sim'; import { type MoveCounter, RandomGen8Teams, type OldRandomBattleSpecies } from '../gen8/teams'; export class RandomLetsGoTeams extends RandomGen8Teams { - randomData: { [species: string]: OldRandomBattleSpecies } = require('./data.json'); + override randomData: { [species: string]: OldRandomBattleSpecies } = require('./data.json'); constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { super(format, prng); @@ -20,7 +20,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams { Water: (movePool, moves, abilities, types, counter) => !counter.get('Water') || !counter.get('stab'), }; } - shouldCullMove( + override shouldCullMove( move: Move, types: Set, moves: Set, @@ -116,7 +116,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams { return { cull: false }; } - randomSet(species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}): RandomTeamsTypes.RandomSet { + override randomSet(species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}): RandomTeamsTypes.RandomSet { species = this.dex.species.get(species); let forme = species.name; @@ -217,7 +217,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams { }; } - randomTeam() { + override randomTeam() { this.enforceNoDirectCustomBanlistChanges(); const pokemon: RandomTeamsTypes.RandomSet[] = []; diff --git a/data/random-battles/gen8bdsp/teams.ts b/data/random-battles/gen8bdsp/teams.ts index bf4761d5b6..7824574a5d 100644 --- a/data/random-battles/gen8bdsp/teams.ts +++ b/data/random-battles/gen8bdsp/teams.ts @@ -4,14 +4,14 @@ import { type PRNG, type PRNGSeed } from '../../../sim/prng'; import { type MoveCounter, RandomGen8Teams, type OldRandomBattleSpecies } from '../gen8/teams'; export class RandomBDSPTeams extends RandomGen8Teams { - randomData: { [species: string]: OldRandomBattleSpecies } = require('./data.json'); + override randomData: { [species: string]: OldRandomBattleSpecies } = require('./data.json'); constructor(format: Format | string, prng: PRNG | PRNGSeed | null) { super(format, prng); this.noStab = [...this.noStab, 'gigaimpact']; } - getHighPriorityItem( + override getHighPriorityItem( ability: string, types: Set, moves: Set, @@ -71,7 +71,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { if (moves.has('bellydrum')) return 'Sitrus Berry'; } - getMediumPriorityItem( + override getMediumPriorityItem( ability: string, moves: Set, counter: MoveCounter, @@ -129,7 +129,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { ) return 'Leftovers'; } - getLowPriorityItem( + override getLowPriorityItem( ability: string, types: Set, moves: Set, @@ -177,7 +177,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { ) return 'Lum Berry'; } - shouldCullMove( + override shouldCullMove( move: Move, types: Set, moves: Set, @@ -524,7 +524,7 @@ export class RandomBDSPTeams extends RandomGen8Teams { return { cull: false }; } - shouldCullAbility( + override shouldCullAbility( ability: string, types: Set, moves: Set, diff --git a/data/random-battles/gen9baby/teams.ts b/data/random-battles/gen9baby/teams.ts index 5422d624d2..b77d5a5717 100644 --- a/data/random-battles/gen9baby/teams.ts +++ b/data/random-battles/gen9baby/teams.ts @@ -62,7 +62,7 @@ export class RandomBabyTeams extends RandomTeams { ); } - cullMovePool( + override cullMovePool( types: string[], moves: Set, abilities: string[], @@ -162,7 +162,7 @@ export class RandomBabyTeams extends RandomTeams { } // Generate random moveset for a given species, role, tera type. - randomMoveset( + override randomMoveset( types: string[], abilities: string[], teamDetails: RandomTeamsTypes.TeamDetails, @@ -421,7 +421,7 @@ export class RandomBabyTeams extends RandomTeams { return moves; } - getAbility( + override getAbility( types: string[], moves: Set, abilities: string[], @@ -466,7 +466,7 @@ export class RandomBabyTeams extends RandomTeams { return this.sample(abilities); } - getPriorityItem( + override getPriorityItem( ability: string, types: string[], moves: Set, @@ -495,7 +495,7 @@ export class RandomBabyTeams extends RandomTeams { if (['Harvest', 'Ripen', 'Unburden'].includes(ability) || moves.has('bellydrum')) return 'Oran Berry'; } - getItem( + override getItem( ability: string, types: string[], moves: Set, @@ -515,7 +515,7 @@ export class RandomBabyTeams extends RandomTeams { return 'Eviolite'; } - getLevel( + override getLevel( species: Species, ): number { if (this.adjustLevel) return this.adjustLevel; @@ -523,7 +523,7 @@ export class RandomBabyTeams extends RandomTeams { return this.randomSets[species.id]?.level || 10; } - getForme(species: Species): string { + override getForme(species: Species): string { if (typeof species.battleOnly === 'string') { // Only change the forme. The species has custom moves, and may have different typing and requirements. return species.battleOnly; @@ -537,7 +537,7 @@ export class RandomBabyTeams extends RandomTeams { return species.name; } - randomSet( + override randomSet( s: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}, isLead = false, @@ -662,7 +662,7 @@ export class RandomBabyTeams extends RandomTeams { }; } - randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); randomBabyTeam() { this.enforceNoDirectCustomBanlistChanges(); diff --git a/data/random-battles/gen9cap/teams.ts b/data/random-battles/gen9cap/teams.ts index 30ea735f76..d75e31634e 100644 --- a/data/random-battles/gen9cap/teams.ts +++ b/data/random-battles/gen9cap/teams.ts @@ -38,7 +38,7 @@ export class RandomCAPTeams extends RandomTeams { if (ability === 'Mountaineer') return 'Life Orb'; } - getLevel( + override getLevel( species: Species, isDoubles: boolean, ): number { @@ -182,7 +182,7 @@ export class RandomCAPTeams extends RandomTeams { randomCAPSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); - randomTeam() { + override randomTeam() { this.enforceNoDirectCustomBanlistChanges(); const seed = this.prng.getSeed(); diff --git a/lib/fs.ts b/lib/fs.ts index 6143535810..a6c28516dc 100644 --- a/lib/fs.ts +++ b/lib/fs.ts @@ -480,7 +480,7 @@ class FileReadStream extends ReadStream { this.atEOF = false; } - _read(size = 16384): Promise { + override _read(size = 16384): Promise { return new Promise((resolve, reject) => { if (this.atEOF) return void resolve(); this.ensureCapacity(size); @@ -501,7 +501,7 @@ class FileReadStream extends ReadStream { }); } - _destroy() { + override _destroy() { return new Promise(resolve => { void this.fd.then(fd => { fs.close(fd, () => resolve()); diff --git a/lib/net.ts b/lib/net.ts index e00a8a94f9..20a96e7b66 100644 --- a/lib/net.ts +++ b/lib/net.ts @@ -147,7 +147,7 @@ export class NetStream extends Streams.ReadWriteStream { } return out; } - _write(data: string | Buffer): Promise | void { + override _write(data: string | Buffer): Promise | void { if (!this.nodeWritableStream) { throw new Error("You must specify opts.writable to write to a request."); } @@ -163,10 +163,10 @@ export class NetStream extends Streams.ReadWriteStream { this.drainListeners.push(resolve); }); } - _read() { + override _read() { this.nodeReadableStream?.resume(); } - _pause() { + override _pause() { this.nodeReadableStream?.pause(); } } diff --git a/lib/process-manager.ts b/lib/process-manager.ts index 792a2df030..729f532765 100644 --- a/lib/process-manager.ts +++ b/lib/process-manager.ts @@ -58,7 +58,7 @@ class SubprocessStream extends Streams.ObjectReadWriteStream { this.taskId = taskId; this.process.process.send(`${taskId}\nNEW`); } - _write(message: string) { + override _write(message: string) { if (!this.process.process.connected) { this.pushError(new Error(`Process disconnected (possibly crashed?)`)); return; @@ -66,10 +66,10 @@ class SubprocessStream extends Streams.ObjectReadWriteStream { this.process.process.send(`${this.taskId}\nWRITE\n${message}`); // responses are handled in ProcessWrapper } - _writeEnd() { + override _writeEnd() { this.process.process.send(`${this.taskId}\nWRITEEND`); } - _destroy() { + override _destroy() { if (!this.process.process.connected) return; this.process.process.send(`${this.taskId}\nDESTROY`); this.process.deleteStream(this.taskId); @@ -83,7 +83,7 @@ class RawSubprocessStream extends Streams.ObjectReadWriteStream { super(); this.process = process; } - _write(message: string) { + override _write(message: string) { if (!this.process.getProcess().connected) { // no error because the crash handler should already have shown an error, and // sometimes harmless messages are sent during cleanup @@ -730,7 +730,7 @@ export class RawProcessManager extends ProcessManager { subscribeUnspawn(callback: (worker: StreamWorker) => void) { this.unspawnSubscription = callback; } - spawn(count?: number) { + override spawn(count?: number) { super.spawn(count); if (!this.workers.length) { this.masterWorker = new StreamWorker(this._setupChild()); @@ -744,7 +744,7 @@ export class RawProcessManager extends ProcessManager { this.spawnSubscription?.(process); return process; } - destroyProcess(process: RawProcessWrapper) { + override destroyProcess(process: RawProcessWrapper) { const index = this.workers.indexOf(process); if (index >= 0) this.workers.splice(index, 1); diff --git a/lib/sql.ts b/lib/sql.ts index 6d47321079..bccece0ffb 100644 --- a/lib/sql.ts +++ b/lib/sql.ts @@ -245,7 +245,7 @@ export class SQLDatabaseManager extends QueryProcessManager } } } - async query(input: DatabaseQuery) { + override async query(input: DatabaseQuery) { const result = await super.query(input); if (result?.queryError) { const err = new Error(result.queryError.message); diff --git a/lib/streams.ts b/lib/streams.ts index 36a6a0c9b5..108b60cb7b 100644 --- a/lib/streams.ts +++ b/lib/streams.ts @@ -465,8 +465,8 @@ export class WriteStream { } export class ReadWriteStream extends ReadStream implements WriteStream { - isReadable: true; - isWritable: true; + override isReadable: true; + override isWritable: true; nodeWritableStream: NodeJS.WritableStream | null; drainListeners: (() => void)[]; @@ -523,7 +523,7 @@ export class ReadWriteStream extends ReadStream implements WriteStream { * because it's valid for the read stream buffer to be filled only by * `_write`. */ - _read(size?: number) {} + override _read(size?: number) {} _writeEnd(): void | Promise {} @@ -818,8 +818,8 @@ interface ObjectReadWriteStreamOptions { } export class ObjectReadWriteStream extends ObjectReadStream implements ObjectWriteStream { - isReadable: true; - isWritable: true; + override isReadable: true; + override isWritable: true; nodeWritableStream: NodeJS.WritableStream | null; constructor(options: ObjectReadWriteStreamOptions = {}) { @@ -839,7 +839,7 @@ export class ObjectReadWriteStream extends ObjectReadStream implements Obj throw new Error(`WriteStream needs to be subclassed and the _write function needs to be implemented.`); } /** In a ReadWriteStream, _read does not need to be implemented. */ - _read() {} + override _read() {} _writeEnd(): void | Promise {} diff --git a/lib/utils.ts b/lib/utils.ts index 6168eb2c44..d96407d622 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -440,7 +440,7 @@ export function bufReadHex(buf: Uint8Array, start = 0, end?: number) { } export class Multiset extends Map { - get(key: T) { + override get(key: T) { return super.get(key) ?? 0; } add(key: T) { diff --git a/server/artemis/local.ts b/server/artemis/local.ts index b256acaf3c..d7f5b228bb 100644 --- a/server/artemis/local.ts +++ b/server/artemis/local.ts @@ -54,12 +54,12 @@ class ArtemisStream extends Streams.ObjectReadWriteStream { this.pushEnd(); }); } - _write(chunk: string) { + override _write(chunk: string) { const [taskId, message] = Utils.splitFirst(chunk, '\n'); this.tasks.add(taskId); this.process.stdin.write(`${taskId}|${message}\n`); } - destroy() { + override destroy() { try { this.process.kill(); } catch {} diff --git a/server/chat-plugins/announcements.ts b/server/chat-plugins/announcements.ts index f19aee5858..0b335b1bb1 100644 --- a/server/chat-plugins/announcements.ts +++ b/server/chat-plugins/announcements.ts @@ -43,7 +43,7 @@ export class Announcement extends Rooms.MinorActivity { } } - onConnect(user: User, connection: Connection | null = null) { + override onConnect(user: User, connection: Connection | null = null) { this.displayTo(user, connection); } diff --git a/server/chat-plugins/auction.ts b/server/chat-plugins/auction.ts index 75bd28b3bf..f09be71ac5 100644 --- a/server/chat-plugins/auction.ts +++ b/server/chat-plugins/auction.ts @@ -617,7 +617,7 @@ export class Auction extends Rooms.SimpleRoomGame { } } - onChatMessage(message: string, user: User) { + override onChatMessage(message: string, user: User) { if (this.state !== 'bid' || this.type !== 'blind') return; if (message.startsWith('.')) message = message.slice(1); if (Number(message.replace(',', '.'))) { @@ -626,7 +626,7 @@ export class Auction extends Rooms.SimpleRoomGame { } } - onLogMessage(message: string, user: User) { + override onLogMessage(message: string, user: User) { if (this.state !== 'bid' || this.type === 'blind') return; if (message.startsWith('.')) message = message.slice(1); if (Number(message.replace(',', '.'))) { @@ -740,7 +740,7 @@ export class Auction extends Rooms.SimpleRoomGame { this.destroy(); } - destroy() { + override destroy() { this.clearNomTimer(); this.clearBidTimer(); super.destroy(); diff --git a/server/chat-plugins/chatlog.ts b/server/chat-plugins/chatlog.ts index a5068fe997..2a8ac34b0a 100644 --- a/server/chat-plugins/chatlog.ts +++ b/server/chat-plugins/chatlog.ts @@ -787,7 +787,7 @@ export class RipgrepLogSearcher extends FSLogSearcher { lineCount += results.length; return { results, lineCount }; } - async searchLinecounts(room: RoomID, month: string, user?: ID) { + override async searchLinecounts(room: RoomID, month: string, user?: ID) { // don't need to check if logs exist since ripgrepSearchMonth does that const regexString = ( user ? `\\|c\\|${this.constructUserRegex(user)}\\|` : `\\|c\\|([^|]+)\\|` diff --git a/server/chat-plugins/hangman.ts b/server/chat-plugins/hangman.ts index dca90f20dc..fa6d887bf6 100644 --- a/server/chat-plugins/hangman.ts +++ b/server/chat-plugins/hangman.ts @@ -57,7 +57,7 @@ export class Hangman extends Rooms.SimpleRoomGame { letterGuesses: string[]; lastGuesser: string; wordSoFar: string[]; - readonly checkChat = true; + override readonly checkChat = true; constructor( room: Room, @@ -91,7 +91,7 @@ export class Hangman extends Rooms.SimpleRoomGame { } } - choose(user: User, word: string) { + override choose(user: User, word: string) { if (user.id === this.creator && !this.options.allowCreator) { throw new Chat.ErrorMessage("You can't guess in your own hangman game."); } diff --git a/server/chat-plugins/helptickets.ts b/server/chat-plugins/helptickets.ts index 31c9f04df4..3378a6f477 100644 --- a/server/chat-plugins/helptickets.ts +++ b/server/chat-plugins/helptickets.ts @@ -206,7 +206,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { this.lastUnclaimedStart = (ticket.active ? this.createTime : 0); } - onJoin(user: User, connection: Connection) { + override onJoin(user: User, connection: Connection) { if (!this.ticket.open) return false; if (!user.isStaff || user.id === this.ticket.userid) { if (this.emptyRoom) this.emptyRoom = false; @@ -243,7 +243,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { } } - onLeave(user: User, oldUserid: ID) { + override onLeave(user: User, oldUserid: ID) { const player = this.playerTable[oldUserid || user.id]; if (player) { this.removePlayer(player); @@ -274,7 +274,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { } } - onLogMessage(message: string, user: User) { + override onLogMessage(message: string, user: User) { if (!this.ticket.open) return; if (user.isStaff && this.ticket.userid !== user.id) this.involvedStaff.add(user.id); if (this.ticket.active) return; @@ -309,7 +309,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { } } - forfeit(user: User) { + override forfeit(user: User) { if (!(user.id in this.playerTable)) return; this.removePlayer(this.playerTable[user.id]); if (!this.ticket.open) return; @@ -458,7 +458,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { } // Modified version of RoomGame.destory - destroy() { + override destroy() { if (tickets[this.ticket.userid] && this.ticket.open) { // Ticket was not deleted - deleted tickets already have this done to them - and was not closed. // Write stats and change flags as appropriate prior to deletion. @@ -476,7 +476,7 @@ export class HelpTicket extends Rooms.SimpleRoomGame { (this.players as any) = null; (this.playerTable as any) = null; } - onChatMessage(message: string, user: User) { + override onChatMessage(message: string, user: User) { HelpTicket.uploadReplaysFrom(message, user, user.connections[0]); } // workaround to modlog for no room diff --git a/server/chat-plugins/mafia.ts b/server/chat-plugins/mafia.ts index da898d0b06..9de1f53101 100644 --- a/server/chat-plugins/mafia.ts +++ b/server/chat-plugins/mafia.ts @@ -322,7 +322,7 @@ class Mafia extends Rooms.RoomGame { phase: 'signups' | 'locked' | 'IDEApicking' | 'IDEAlocked' | 'day' | 'night'; dayNum: number; - timer: NodeJS.Timeout | null; + override timer: NodeJS.Timeout | null; dlAt: number; IDEA: MafiaIDEAModule; @@ -1777,7 +1777,7 @@ class Mafia extends Rooms.RoomGame { } } - onChatMessage(message: string, user: User) { + override onChatMessage(message: string, user: User) { const subIndex = this.hostRequestedSub.indexOf(user.id); if (subIndex !== -1) { this.hostRequestedSub.splice(subIndex, 1); @@ -1821,11 +1821,11 @@ class Mafia extends Rooms.RoomGame { } } - onConnect(user: User) { + override onConnect(user: User) { this.sendUser(user, `|uhtml|mafia|${this.roomWindow()}`); } - onJoin(user: User) { + override onJoin(user: User) { const player = this.getPlayer(user.id); if (player) { return player.updateHtmlRoom(); @@ -1833,7 +1833,7 @@ class Mafia extends Rooms.RoomGame { if (user.id === this.hostid || this.cohostids.includes(user.id)) return this.updateHost(user.id); } - removeBannedUser(user: User) { + override removeBannedUser(user: User) { // Player was banned, attempt to sub now // If we can't sub now, make subbing them out the top priority if (!this.getPlayer(user.id)) return; @@ -1841,7 +1841,7 @@ class Mafia extends Rooms.RoomGame { this.nextSub(); } - forfeit(user: User) { + override forfeit(user: User) { // Add the player to the sub list. const player = this.getPlayer(user.id); if (!player || player.isEliminated()) return; diff --git a/server/chat-plugins/poll.ts b/server/chat-plugins/poll.ts index 8041088114..9d7fee2875 100644 --- a/server/chat-plugins/poll.ts +++ b/server/chat-plugins/poll.ts @@ -303,11 +303,11 @@ export class Poll extends Rooms.MinorActivity { } } - onConnect(user: User, connection: Connection | null = null) { + override onConnect(user: User, connection: Connection | null = null) { this.displayTo(user, connection); } - onRename(user: User, oldid: ID, joining: boolean) { + override onRename(user: User, oldid: ID, joining: boolean) { if (user.id in this.voters) { this.updateFor(user); } diff --git a/server/chat-plugins/scavengers.ts b/server/chat-plugins/scavengers.ts index 61f577e9dd..6ec9756ff6 100644 --- a/server/chat-plugins/scavengers.ts +++ b/server/chat-plugins/scavengers.ts @@ -139,7 +139,7 @@ class Ladder { } class PlayerLadder extends Ladder { - addPoints(name: string, aspect: string, points: number, noUpdate?: boolean) { + override addPoints(name: string, aspect: string, points: number, noUpdate?: boolean) { if (!aspect.startsWith('cumulative-')) { this.addPoints(name, `cumulative-${aspect}`, points, noUpdate); } @@ -338,9 +338,9 @@ export class ScavengerHunt extends Rooms.RoomGame { staffHostName: string; scavGame: true; timerEnd: number | null; - timer: NodeJS.Timeout | null; + override timer: NodeJS.Timeout | null; - readonly checkChat = true; + override readonly checkChat = true; [k: string]: any; // for purposes of adding new temporary properties for the purpose of twists. constructor({ room, staffHost, hosts, gameType, questions, isHTML, mod }: @@ -433,7 +433,7 @@ export class ScavengerHunt extends Rooms.RoomGame { } // alert new users that are joining the room about the current hunt. - onConnect(user: User, connection: Connection) { + override onConnect(user: User, connection: Connection) { // send the fact that a hunt is currently going on. connection.sendTo(this.room, this.getCreationMessage()); this.runEvent('Connect', user, connection); @@ -462,7 +462,7 @@ export class ScavengerHunt extends Rooms.RoomGame { `(To answer, use /scavenge ANSWER)`; } - joinGame(user: User) { + override joinGame(user: User) { if (this.hosts.some(h => h.id === user.id) || user.id === this.staffHostId) { return user.sendTo( this.room, @@ -492,7 +492,7 @@ export class ScavengerHunt extends Rooms.RoomGame { } } - leaveGame(user: User) { + override leaveGame(user: User) { const player = this.playerTable[user.id]; if (!player) return user.sendTo(this.room, "You have not joined the scavenger hunt."); @@ -589,7 +589,7 @@ export class ScavengerHunt extends Rooms.RoomGame { return minutes; } - choose(user: User, originalValue: string) { + override choose(user: User, originalValue: string) { if (!(user.id in this.playerTable)) { if (!this.joinGame(user)) return false; } @@ -858,7 +858,7 @@ export class ScavengerHunt extends Rooms.RoomGame { } // modify destroy to get rid of any timers in the current roomgame. - destroy() { + override destroy() { if (this.timer) { clearTimeout(this.timer); } @@ -925,9 +925,9 @@ export class ScavengerHunt extends Rooms.RoomGame { return true; } - onUpdateConnection() {} + override onUpdateConnection() {} - onChatMessage(msg: string) { + override onChatMessage(msg: string) { let msgId = toID(msg) as string; // identify if there is a bot/dt command that failed @@ -1004,7 +1004,7 @@ export class ScavengerHunt extends Rooms.RoomGame { export class ScavengerHuntPlayer extends Rooms.RoomGamePlayer { lastGuess: number; - completed: boolean; + override completed: boolean; joinIps: string[]; currentQuestion: number; @@ -1040,7 +1040,7 @@ export class ScavengerHuntPlayer extends Rooms.RoomGamePlayer { } } - destroy() { + override destroy() { const user = Users.getExact(this.id); if (user) { user.games.delete(this.game.roomid); diff --git a/server/chat-plugins/trivia/trivia.ts b/server/chat-plugins/trivia/trivia.ts index 0ac7d0b553..09c797fdce 100644 --- a/server/chat-plugins/trivia/trivia.ts +++ b/server/chat-plugins/trivia/trivia.ts @@ -485,21 +485,21 @@ export class Trivia extends Rooms.RoomGame { return new TriviaPlayer(user, this); } - destroy() { + override destroy() { if (this.phaseTimeout) clearTimeout(this.phaseTimeout); this.phaseTimeout = null; this.kickedUsers.clear(); super.destroy(); } - onConnect(user: User) { + override onConnect(user: User) { const player = this.playerTable[user.id]; if (!player?.isAbsent) return false; player.toggleAbsence(); } - onLeave(user: User, oldUserID: ID) { + override onLeave(user: User, oldUserID: ID) { // The user cannot participate, but their score should be kept // regardless in cases of disconnects. const player = this.playerTable[oldUserID || user.id]; @@ -886,7 +886,7 @@ const hrtimeToNanoseconds = (hrtime: number[]) => hrtime[0] * 1e9 + hrtime[1]; * correctly. */ export class FirstModeTrivia extends Trivia { - answerQuestion(answer: string, user: User) { + override answerQuestion(answer: string, user: User) { const player = this.playerTable[user.id]; if (!player) throw new Chat.ErrorMessage(this.room.tr`You are not a player in the current trivia game.`); if (this.isPaused) throw new Chat.ErrorMessage(this.room.tr`The trivia game is paused.`); @@ -923,11 +923,11 @@ export class FirstModeTrivia extends Trivia { this.setAskTimeout(); } - calculatePoints() { + override calculatePoints() { return 5; } - tallyAnswers(): void { + override tallyAnswers(): void { if (this.isPaused) return; this.phase = INTERMISSION_PHASE; @@ -957,7 +957,7 @@ export class FirstModeTrivia extends Trivia { * depending on how quickly they answer the question. */ export class TimerModeTrivia extends Trivia { - answerQuestion(answer: string, user: User) { + override answerQuestion(answer: string, user: User) { const player = this.playerTable[user.id]; if (!player) throw new Chat.ErrorMessage(this.room.tr`You are not a player in the current trivia game.`); if (this.isPaused) throw new Chat.ErrorMessage(this.room.tr`The trivia game is paused.`); @@ -973,11 +973,11 @@ export class TimerModeTrivia extends Trivia { * The difference between the time scoring began and the time the question * was asked, in nanoseconds. */ - calculatePoints(diff: number, totalDiff: number) { + override calculatePoints(diff: number, totalDiff: number) { return Math.floor(6 - 5 * diff / totalDiff); } - tallyAnswers() { + override tallyAnswers() { if (this.isPaused) return; this.phase = INTERMISSION_PHASE; @@ -1062,7 +1062,7 @@ export class TimerModeTrivia extends Trivia { * better). */ export class NumberModeTrivia extends Trivia { - answerQuestion(answer: string, user: User) { + override answerQuestion(answer: string, user: User) { const player = this.playerTable[user.id]; if (!player) throw new Chat.ErrorMessage(this.room.tr`You are not a player in the current trivia game.`); if (this.isPaused) throw new Chat.ErrorMessage(this.room.tr`The trivia game is paused.`); @@ -1072,15 +1072,15 @@ export class NumberModeTrivia extends Trivia { player.setAnswer(answer, isCorrect); } - calculatePoints(correctPlayers: number) { + override calculatePoints(correctPlayers: number) { return correctPlayers && (6 - Math.floor(5 * correctPlayers / this.playerCount)); } - getRoundLength() { + override getRoundLength() { return 6 * 1000; } - tallyAnswers() { + override tallyAnswers() { if (this.isPaused) return; this.phase = INTERMISSION_PHASE; @@ -1137,7 +1137,7 @@ export class NumberModeTrivia extends Trivia { * Triumvirate mode rewards points to the top three users to answer the question correctly. */ export class TriumvirateModeTrivia extends Trivia { - answerQuestion(answer: string, user: User) { + override answerQuestion(answer: string, user: User) { const player = this.playerTable[user.id]; if (!player) throw new Chat.ErrorMessage(this.room.tr`You are not a player in the current trivia game.`); if (this.isPaused) throw new Chat.ErrorMessage(this.room.tr`The trivia game is paused.`); @@ -1150,11 +1150,11 @@ export class TriumvirateModeTrivia extends Trivia { } } - calculatePoints(answerNumber: number) { + override calculatePoints(answerNumber: number) { return 5 - answerNumber * 2; // 5 points to 1st, 3 points to 2nd, 1 point to 1st } - tallyAnswers() { + override tallyAnswers() { if (this.isPaused) return; this.phase = INTERMISSION_PHASE; const correctPlayers = Object.values(this.playerTable).filter(p => p.isCorrect); @@ -1433,9 +1433,9 @@ export class MastermindRound extends FirstModeTrivia { this.start(); } - init() { + override init() { } - start() { + override start() { const player = Object.values(this.playerTable)[0]; const name = Utils.escapeHTML(player.name); broadcast(this.room, this.room.tr`A Mastermind round in the ${this.game.category} category for ${name} is starting!`); @@ -1447,17 +1447,17 @@ export class MastermindRound extends FirstModeTrivia { this.setPhaseTimeout(() => void this.askQuestion(), MASTERMIND_INTERMISSION_INTERVAL); } - win(): Promise { + override win(): Promise { if (this.phaseTimeout) clearTimeout(this.phaseTimeout); this.phaseTimeout = null; return Promise.resolve(); } - addTriviaPlayer(user: User): string | undefined { + override addTriviaPlayer(user: User): string | undefined { throw new Chat.ErrorMessage(`This is a round of Mastermind; to join the overall game of Mastermind, use /mm join`); } - setTallyTimeout() { + override setTallyTimeout() { // Players must use /mastermind pass to pass on a question } @@ -1465,11 +1465,11 @@ export class MastermindRound extends FirstModeTrivia { this.tallyAnswers(); } - setAskTimeout() { + override setAskTimeout() { this.setPhaseTimeout(() => void this.askQuestion(), MASTERMIND_INTERMISSION_INTERVAL); } - destroy() { + override destroy() { super.destroy(); } } @@ -1492,7 +1492,7 @@ export class MastermindFinals extends MastermindRound { this.setPhaseTimeout(() => void this.askQuestion(), MASTERMIND_FINALS_START_TIMEOUT); } - async win() { + override async win() { await super.win(); const points = new Map(); for (const id in this.playerTable) { @@ -1500,9 +1500,9 @@ export class MastermindFinals extends MastermindRound { } } - setTallyTimeout = FirstModeTrivia.prototype.setTallyTimeout; + override setTallyTimeout = FirstModeTrivia.prototype.setTallyTimeout; - pass() { + override pass() { throw new Chat.ErrorMessage(this.room.tr`You cannot pass in the finals.`); } } diff --git a/server/chat-plugins/wifi.tsx b/server/chat-plugins/wifi.tsx index be1490beb3..72607088d4 100644 --- a/server/chat-plugins/wifi.tsx +++ b/server/chat-plugins/wifi.tsx @@ -103,7 +103,7 @@ abstract class Giveaway extends Rooms.SimpleRoomGame { gaNumber: number; host: User; giver: User; - room: Room; + override room: Room; ot: string; tid: string; game: Game; @@ -116,7 +116,7 @@ abstract class Giveaway extends Rooms.SimpleRoomGame { * IP:userid */ joined: Map; - timer: NodeJS.Timeout | null; + override timer: NodeJS.Timeout | null; pokemonID: ID; sprite: Chat.VNode; @@ -146,7 +146,7 @@ abstract class Giveaway extends Rooms.SimpleRoomGame { [this.pokemonID, this.sprite] = Giveaway.getSprite(prize); } - destroy() { + override destroy() { this.clearTimer(); super.destroy(); } @@ -441,7 +441,7 @@ export class QuestionGiveaway extends Giveaway { this.timer = setTimeout(() => this.end(false), 1000 * 60 * 5); } - choose(user: User, guess: string) { + override choose(user: User, guess: string) { if (this.phase !== 'started') return user.sendTo(this.room, "The giveaway has not started yet."); if (this.checkJoined(user) && ![...this.joined.values()].includes(user.id)) { @@ -551,7 +551,7 @@ export class QuestionGiveaway extends Giveaway { ); } - checkExcluded(user: User) { + override checkExcluded(user: User) { if (user === this.host) return true; if (this.host.ips.includes(user.latestIp) && !Config.noipchecks) return true; if (this.host.previousIDs.includes(toID(user))) return true; @@ -631,7 +631,7 @@ export class LotteryGiveaway extends Giveaway { }; } - generateReminder(joined = false) { + override generateReminder(joined = false) { const cmd = (joined ? 'Leave' : 'Join'); return this.generateWindow(<> The lottery drawing will occur in 2 minutes, and with {Chat.count(this.maxWinners, "winners")}!
@@ -739,7 +739,7 @@ export class LotteryGiveaway extends Giveaway { export class GTS extends Rooms.SimpleRoomGame { override readonly gameid = 'gts' as ID; gtsNumber: number; - room: Room; + override room: Room; giver: User; left: number; summary: string; @@ -749,7 +749,7 @@ export class GTS extends Rooms.SimpleRoomGame { sprite: Chat.VNode; sent: string[]; noDeposits: boolean; - timer: NodeJS.Timeout | null; + override timer: NodeJS.Timeout | null; constructor( room: Room, giver: User, amount: number, diff --git a/server/chat-plugins/youtube.ts b/server/chat-plugins/youtube.ts index 97433e9895..7dfe424446 100644 --- a/server/chat-plugins/youtube.ts +++ b/server/chat-plugins/youtube.ts @@ -393,7 +393,7 @@ export class GroupWatch extends Rooms.SimpleRoomGame { this.url = url; this.info = videoInfo; } - onJoin(user: User) { + override onJoin(user: User) { const hints = this.hints(); for (const hint of hints) { user.sendTo(this.room.roomid, `|html|${hint}`); @@ -478,7 +478,7 @@ export class GroupWatch extends Rooms.SimpleRoomGame { this.info = info; this.update(); } - destroy() { + override destroy() { GroupWatch.groupwatches.delete(this.id); this.room.game = null; this.room = null!; diff --git a/server/ladders-challenges.ts b/server/ladders-challenges.ts index 65ae5eaada..7e114bd4df 100644 --- a/server/ladders-challenges.ts +++ b/server/ladders-challenges.ts @@ -77,7 +77,7 @@ export class GameChallenge extends AbstractChallenge { */ export class BattleInvite extends AbstractChallenge { declare acceptCommand: string; - destroy(accepted?: boolean) { + override destroy(accepted?: boolean) { if (accepted) return; const room = Rooms.get(this.roomid); diff --git a/server/punishments.ts b/server/punishments.ts index 978e4ae0aa..9e60b1a4de 100644 --- a/server/punishments.ts +++ b/server/punishments.ts @@ -95,7 +95,7 @@ class PunishmentMap extends Map { } } } - get(k: string) { + override get(k: string) { const punishments = super.get(k); if (punishments) { this.removeExpiring(punishments); @@ -104,7 +104,7 @@ class PunishmentMap extends Map { } return undefined; } - has(k: string) { + override has(k: string) { return !!this.get(k); } getByType(k: string, type: string) { diff --git a/server/room-battle-bestof.ts b/server/room-battle-bestof.ts index d852a724ec..2204158cd6 100644 --- a/server/room-battle-bestof.ts +++ b/server/room-battle-bestof.ts @@ -352,7 +352,7 @@ export class BestOfGame extends RoomGame { } } - onBattleWin(room: Room, winnerid: ID) { + override onBattleWin(room: Room, winnerid: ID) { if (this.ended) return; // can happen if the bo3 is destroyed fsr const winner = winnerid ? this.playerTable[winnerid] : null; diff --git a/server/rooms.ts b/server/rooms.ts index 1d1b3ed403..faa1265aa0 100644 --- a/server/rooms.ts +++ b/server/rooms.ts @@ -1951,7 +1951,7 @@ export class GameRoom extends BasicRoom { if (!(user.id in this.game.playerTable)) return this.getLog(); return this.getLog(this.game.playerTable[user.id].num as 0); } - update(excludeUser: User | null = null) { + override update(excludeUser: User | null = null) { if (!this.log.broadcastBuffer.length) return; if (this.userCount) { @@ -1961,7 +1961,7 @@ export class GameRoom extends BasicRoom { this.pokeExpireTimer(); } - pokeExpireTimer() { + override pokeExpireTimer() { // empty rooms time out after ten minutes if (!this.userCount) { if (this.expireTimer) clearTimeout(this.expireTimer); @@ -1980,11 +1980,11 @@ export class GameRoom extends BasicRoom { return "Modchat can only be changed by the user who turned it on, or by staff"; } } - onConnect(user: User, connection: Connection) { + override onConnect(user: User, connection: Connection) { this.sendUser(connection, '|init|battle\n|title|' + this.title + '\n' + this.getLogForUser(user)); this.game?.onConnect?.(user, connection); } - onJoin(user: User, connection: Connection) { + override onJoin(user: User, connection: Connection) { if (!user) return false; // ??? if (this.users[user.id]) return false; diff --git a/server/sockets.ts b/server/sockets.ts index db98702bda..b38ed14791 100644 --- a/server/sockets.ts +++ b/server/sockets.ts @@ -505,7 +505,7 @@ export class ServerStream extends Streams.ObjectReadWriteStream { }); } - _write(data: string) { + override _write(data: string) { // console.log('worker received: ' + data); const receiver = this.receivers[data.charAt(0)]; diff --git a/server/tournaments/index.ts b/server/tournaments/index.ts index 09e6391869..16b73e1cb4 100644 --- a/server/tournaments/index.ts +++ b/server/tournaments/index.ts @@ -175,7 +175,7 @@ export class Tournament extends Rooms.RoomGame { room.send(`|tournament|update|${JSON.stringify(update)}`); this.update(); } - destroy() { + override destroy() { this.forceEnd(); } remove() { @@ -379,7 +379,7 @@ export class Tournament extends Rooms.RoomGame { return Punishments.hasRoomPunishType(room, toID(user), 'TOURBAN'); } - removeBannedUser(userid: User | ID) { + override removeBannedUser(userid: User | ID) { userid = toID(userid); if (!(userid in this.playerTable)) return; if (this.isTournamentStarted) { @@ -1078,16 +1078,16 @@ export class Tournament extends Rooms.RoomGame { getDefaultCustomName() { return Dex.formats.get(this.fullFormat).name + " (with custom rules)"; } - forfeit(user: User) { + override forfeit(user: User) { return this.disqualifyUser(user.id, null, "You left the tournament", true); } - onConnect(user: User, connection: Connection) { + override onConnect(user: User, connection: Connection) { this.updateFor(user, connection); } - onUpdateConnection(user: User, connection: Connection) { + override onUpdateConnection(user: User, connection: Connection) { this.updateFor(user, connection); } - onRename(user: User, oldUserid: ID) { + override onRename(user: User, oldUserid: ID) { if (oldUserid in this.playerTable) { this.renamePlayer(user, oldUserid); } @@ -1107,7 +1107,7 @@ export class Tournament extends Rooms.RoomGame { } } } - onBattleWin(room: GameRoom, winnerid: ID) { + override onBattleWin(room: GameRoom, winnerid: ID) { if (this.completedMatches.has(room.roomid)) return; this.completedMatches.add(room.roomid); room.setParent(null); diff --git a/server/user-groups.ts b/server/user-groups.ts index 2dc57676fd..8e375cd800 100644 --- a/server/user-groups.ts +++ b/server/user-groups.ts @@ -53,7 +53,7 @@ export abstract class Auth extends Map { * Passing a User will read `user.group`, which is relevant for unregistered * users with temporary global auth. */ - get(user: ID | User) { + override get(user: ID | User) { if (typeof user !== 'string') return user.tempGroup; return super.get(user) || Auth.defaultSymbol(); } @@ -252,7 +252,7 @@ export class RoomAuth extends Auth { super(); this.room = room; } - get(userOrID: ID | User): GroupSymbol { + override get(userOrID: ID | User): GroupSymbol { const id = typeof userOrID === 'string' ? userOrID : userOrID.id; const parentAuth: Auth | null = this.room.parent ? this.room.parent.auth : @@ -280,7 +280,7 @@ export class RoomAuth extends Auth { return parentGroup; } - getEffectiveSymbol(user: User) { + override getEffectiveSymbol(user: User) { const symbol = super.getEffectiveSymbol(user); if (!this.room.persist && symbol === user.tempGroup) { const replaceGroup = Auth.getGroup(symbol).globalGroupInPersonalRoom; @@ -315,7 +315,7 @@ export class RoomAuth extends Auth { super.set(userid as ID, this.room.settings.auth[userid]); } } - set(id: ID, symbol: GroupSymbol) { + override set(id: ID, symbol: GroupSymbol) { if (symbol === 'whitelist' as GroupSymbol) { symbol = Auth.defaultSymbol(); } @@ -327,7 +327,7 @@ export class RoomAuth extends Auth { if (user) this.room.onUpdateIdentity(user); return this; } - delete(id: ID) { + override delete(id: ID) { if (!this.has(id)) return false; super.delete(id); delete this.room.settings.auth[id]; @@ -379,7 +379,7 @@ export class GlobalAuth extends Auth { super.set(id, newSymbol); } } - set(id: ID, group: GroupSymbol, username?: string) { + override set(id: ID, group: GroupSymbol, username?: string) { if (!username) username = id; const user = Users.get(id, true); if (user) { @@ -393,7 +393,7 @@ export class GlobalAuth extends Auth { void this.save(); return this; } - delete(id: ID) { + override delete(id: ID) { if (!super.has(id)) return false; super.delete(id); const user = Users.get(id); diff --git a/server/users.ts b/server/users.ts index 9ffe50a11a..07cc7b4093 100644 --- a/server/users.ts +++ b/server/users.ts @@ -337,7 +337,7 @@ export interface UserSettings { // User export class User extends Chat.MessageContext { /** In addition to needing it to implement MessageContext, this is also nice for compatibility with Connection. */ - readonly user: User; + override readonly user: User; /** * Not a source of truth - should always be in sync with * `[...Rooms.rooms.values()].filter(room => this.id in room.users)` @@ -358,7 +358,7 @@ export class User extends Chat.MessageContext { id: ID; tempGroup: GroupSymbol; avatar: string | number; - language: ID | null; + override language: ID | null; connected: boolean; connections: Connection[]; @@ -1556,7 +1556,7 @@ export class User extends Chat.MessageContext { this.punishmentTimer = null; } } - toString() { + override toString() { return this.id; } } diff --git a/sim/battle-stream.ts b/sim/battle-stream.ts index 651d357c00..67a5483c88 100644 --- a/sim/battle-stream.ts +++ b/sim/battle-stream.ts @@ -58,7 +58,7 @@ export class BattleStream extends Streams.ObjectReadWriteStream { this.battle = null; } - _write(chunk: string) { + override _write(chunk: string) { if (this.noCatch) { this._writeLines(chunk); } else { @@ -235,13 +235,13 @@ export class BattleStream extends Streams.ObjectReadWriteStream { } } - _writeEnd() { + override _writeEnd() { // if battle already ended, we don't need to pushEnd. if (!this.atEOF) this.pushEnd(); this._destroy(); } - _destroy() { + override _destroy() { if (this.battle) this.battle.destroy(); } } @@ -379,7 +379,7 @@ export class BattleTextStream extends Streams.ReadWriteStream { this.pushEnd(); } - _write(message: string | Buffer) { + override _write(message: string | Buffer) { this.currentMessage += `${message}`; const index = this.currentMessage.lastIndexOf('\n'); if (index >= 0) { @@ -388,7 +388,7 @@ export class BattleTextStream extends Streams.ReadWriteStream { } } - _writeEnd() { + override _writeEnd() { return this.battleStream.writeEnd(); } } diff --git a/sim/dex-data.ts b/sim/dex-data.ts index 392b58acf0..f9a8134c6d 100644 --- a/sim/dex-data.ts +++ b/sim/dex-data.ts @@ -132,7 +132,7 @@ export abstract class BasicEffect implements EffectData { } export class Nature extends BasicEffect implements Readonly { - readonly effectType: 'Nature'; + override readonly effectType: 'Nature'; readonly plus?: StatIDExceptHP; readonly minus?: StatIDExceptHP; constructor(data: AnyObject) { diff --git a/sim/dex-formats.ts b/sim/dex-formats.ts index 93fffd755c..678dee2a92 100644 --- a/sim/dex-formats.ts +++ b/sim/dex-formats.ts @@ -392,7 +392,7 @@ export class Format extends BasicEffect implements Readonly { * random/fixed teams. null if players can bring teams. */ declare readonly team?: string; - readonly effectType: FormatEffectType; + override readonly effectType: FormatEffectType; readonly debug: boolean; /** * Whether or not a format will update ladder points if searched diff --git a/sim/tools/exhaustive-runner.ts b/sim/tools/exhaustive-runner.ts index 2e8c715dd6..c10c771750 100644 --- a/sim/tools/exhaustive-runner.ts +++ b/sim/tools/exhaustive-runner.ts @@ -409,11 +409,11 @@ class CoordinatedPlayerAI extends RandomPlayerAI { this.pools = pools; } - protected chooseTeamPreview(team: AnyObject[]): string { + protected override chooseTeamPreview(team: AnyObject[]): string { return `team ${this.choosePokemon(team.map((p, i) => ({ slot: i + 1, pokemon: p }))) || 1}`; } - protected chooseMove(active: AnyObject, moves: { choice: string, move: AnyObject }[]): string { + protected override chooseMove(active: AnyObject, moves: { choice: string, move: AnyObject }[]): string { this.markUsedIfGmax(active); // Prefer to use a move which hasn't been used yet. for (const { choice, move } of moves) { @@ -426,7 +426,7 @@ class CoordinatedPlayerAI extends RandomPlayerAI { return super.chooseMove(active, moves); } - protected chooseSwitch(active: AnyObject | undefined, switches: { slot: number, pokemon: AnyObject }[]): number { + protected override chooseSwitch(active: AnyObject | undefined, switches: { slot: number, pokemon: AnyObject }[]): number { this.markUsedIfGmax(active); return this.choosePokemon(switches) || super.chooseSwitch(active, switches); } diff --git a/sim/tools/random-player-ai.ts b/sim/tools/random-player-ai.ts index d212318dc4..6867cadc19 100644 --- a/sim/tools/random-player-ai.ts +++ b/sim/tools/random-player-ai.ts @@ -27,7 +27,7 @@ export class RandomPlayerAI extends BattlePlayer { this.prng = PRNG.get(options.seed); } - receiveError(error: Error) { + override receiveError(error: Error) { // If we made an unavailable choice we will receive a followup request to // allow us the opportunity to correct our decision. if (error.message.startsWith('[Unavailable choice]')) return; diff --git a/sim/tools/runner.ts b/sim/tools/runner.ts index 4626b1257f..cfe9a2da2a 100644 --- a/sim/tools/runner.ts +++ b/sim/tools/runner.ts @@ -163,7 +163,7 @@ class RawBattleStream extends BattleStreams.BattleStream { this.rawInputLog = []; } - _write(message: string) { + override _write(message: string) { if (this.input) console.log(message); this.rawInputLog.push(message); super._write(message); diff --git a/tsconfig.json b/tsconfig.json index ea1a8a364b..31f40ce59f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,7 @@ "incremental": true, "allowUnreachableCode": false, "esModuleInterop": true, - "noImplicitOverride": false, + "noImplicitOverride": true, "useDefineForClassFields": false }, "types": ["node"],