Optimize postpone error handler
This commit is contained in:
@ -1,7 +1,9 @@
|
||||
import { Args } from '../Command';
|
||||
import { Task } from '../Queue/TaskQueue';
|
||||
import { DataStorage } from '../DataStorage';
|
||||
import { Scheduler } from '../Scheduler';
|
||||
import { ActionError, TryLaterError } from '../Errors';
|
||||
import { grabActiveVillageId } from '../Page/VillageBlock';
|
||||
import { aroundMinutes } from '../utils';
|
||||
|
||||
const actionMap: { [name: string]: Function | undefined } = {};
|
||||
|
||||
@ -25,4 +27,16 @@ export class ActionController {
|
||||
}
|
||||
|
||||
async run(args: Args, task: Task) {}
|
||||
|
||||
ensureSameVillage(args: Args, task: Task) {
|
||||
let villageId = args.villageId;
|
||||
if (villageId === undefined) {
|
||||
throw new ActionError(task.id, 'Undefined village id');
|
||||
}
|
||||
|
||||
const activeVillageId = grabActiveVillageId();
|
||||
if (villageId !== activeVillageId) {
|
||||
throw new TryLaterError(task.id, aroundMinutes(1), 'Not same village');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,20 +3,23 @@ import { Args } from '../Command';
|
||||
import { ActionError, GrabError, TryLaterError } from '../Errors';
|
||||
import { Task } from '../Queue/TaskQueue';
|
||||
import { clickBuildButton } from '../Page/BuildingPage';
|
||||
import { aroundMinutes } from '../utils';
|
||||
|
||||
@registerAction
|
||||
export class BuildBuildingAction extends ActionController {
|
||||
async run(args: Args, task: Task): Promise<any> {
|
||||
this.ensureSameVillage(args, task);
|
||||
|
||||
const buildTypeId = args.buildTypeId;
|
||||
if (!buildTypeId) {
|
||||
throw new ActionError(task.id, 'Unknown build type id');
|
||||
if (buildTypeId === undefined) {
|
||||
throw new ActionError(task.id, 'Undefined build type id');
|
||||
}
|
||||
|
||||
try {
|
||||
clickBuildButton(buildTypeId);
|
||||
} catch (e) {
|
||||
if (e instanceof GrabError) {
|
||||
throw new TryLaterError(task.id, 15 * 60, 'No build button, try later');
|
||||
throw new TryLaterError(task.id, aroundMinutes(5), 'No upgrade button, try later');
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { ActionController, registerAction } from './ActionController';
|
||||
import { Args } from '../Command';
|
||||
import { Task } from '../Queue/TaskQueue';
|
||||
import { PostponeAllBuildingsError, GrabError } from '../Errors';
|
||||
import { grabActiveVillageId, grabBuildingQueueInfo } from '../Page/VillageBlock';
|
||||
import { GrabError, TryLaterError } from '../Errors';
|
||||
import { grabBuildingQueueInfo } from '../Page/VillageBlock';
|
||||
import { BuildingQueueInfo } from '../Game';
|
||||
|
||||
@registerAction
|
||||
@ -10,12 +10,7 @@ export class CheckBuildingRemainingTimeAction extends ActionController {
|
||||
async run(args: Args, task: Task): Promise<any> {
|
||||
const info = this.grabBuildingQueueInfoOrDefault();
|
||||
if (info.seconds > 0) {
|
||||
throw new PostponeAllBuildingsError(
|
||||
task.id,
|
||||
grabActiveVillageId(),
|
||||
info.seconds + 1,
|
||||
'Building queue is full'
|
||||
);
|
||||
throw new TryLaterError(task.id, info.seconds + 1, 'Building queue is full');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,22 +1,20 @@
|
||||
import { ActionController, registerAction } from './ActionController';
|
||||
import { Args } from '../Command';
|
||||
import { ActionError, GrabError, PostponeAllBuildingsError } from '../Errors';
|
||||
import { GrabError, TryLaterError } from '../Errors';
|
||||
import { Task } from '../Queue/TaskQueue';
|
||||
import { clickUpgradeButton } from '../Page/BuildingPage';
|
||||
import { aroundMinutes } from '../utils';
|
||||
|
||||
@registerAction
|
||||
export class UpgradeBuildingAction extends ActionController {
|
||||
async run(args: Args, task: Task): Promise<any> {
|
||||
let villageId = args.villageId;
|
||||
if (villageId === undefined) {
|
||||
throw new ActionError(task.id, 'No village id');
|
||||
}
|
||||
this.ensureSameVillage(args, task);
|
||||
|
||||
try {
|
||||
clickUpgradeButton();
|
||||
} catch (e) {
|
||||
if (e instanceof GrabError) {
|
||||
throw new PostponeAllBuildingsError(task.id, villageId, 15 * 60, 'No upgrade button, try later');
|
||||
throw new TryLaterError(task.id, aroundMinutes(5), 'No upgrade button, try later');
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
Reference in New Issue
Block a user