koishi-plugin-warframe 1.14.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -40,6 +40,7 @@ Toolkit for Warframe. Provides Warframe Market prices, fissures, arbitrations, r
40
40
  | `circuit` | | `灵化之源`, `灵化` | Query weekly circuit rewards (warframes and incarnon adapters). |
41
41
  | `steel-essence` | | `钢铁精华` | Query this week's Steel Essence shop rotation (current offering, remaining time, upcoming). |
42
42
  | `1999calendar` | | `日历`, `1999日历`, `霍瓦尼亚日历` | Query the current 1999 Höllvania calendar tagged days (challenges, overrides, rewards). |
43
+ | `event` | | `活动`, `事件` | Query active world events (progress, rewards, remaining time). |
43
44
 
44
45
  ### Open World Cycles
45
46
 
package/lib/index.d.ts CHANGED
@@ -34,7 +34,7 @@ declare module "warframe/types/ocr" {
34
34
  }
35
35
  }
36
36
  declare module "warframe/types/warframe-result" {
37
- export const warframeErrorCodes: readonly ["common.fetchFailed", "relic.invalidName", "relic.dataLoading", "relic.notFound", "arbitration.invalidDayRange", "bounty.unavailable", "invasion.unavailable", "alert.unavailable", "calendar.unavailable", "steelEssence.unavailable", "nightwave.unavailable", "sortie.unavailable", "voidTrader.drifting", "voidTrader.arriving", "riven.imageFetchFailed", "riven.imageParseFailed", "riven.weaponNotFound", "riven.dispositionError", "riven.weaponTypeError", "riven.statTypeError", "wfm.inputItemName", "wfm.itemNotFound", "wfm.itemAmbiguous", "wfm.orderFetchFailed", "wfm.noOnlineSeller", "wfm.rivenWeaponNotFound", "wfm.rivenOrderFetchFailed", "wfm.noOnlineRivenSeller", "miscs.hotRiven.noData", "miscs.hotRiven.fetchFailed"];
37
+ export const warframeErrorCodes: readonly ["common.fetchFailed", "relic.invalidName", "relic.dataLoading", "relic.notFound", "arbitration.invalidDayRange", "bounty.unavailable", "invasion.unavailable", "alert.unavailable", "event.unavailable", "calendar.unavailable", "steelEssence.unavailable", "nightwave.unavailable", "sortie.unavailable", "voidTrader.drifting", "voidTrader.arriving", "riven.imageFetchFailed", "riven.imageParseFailed", "riven.weaponNotFound", "riven.dispositionError", "riven.weaponTypeError", "riven.statTypeError", "wfm.inputItemName", "wfm.itemNotFound", "wfm.itemAmbiguous", "wfm.orderFetchFailed", "wfm.noOnlineSeller", "wfm.rivenWeaponNotFound", "wfm.rivenOrderFetchFailed", "wfm.noOnlineRivenSeller", "miscs.hotRiven.noData", "miscs.hotRiven.fetchFailed"];
38
38
  export type WarframeErrorCode = typeof warframeErrorCodes[number];
39
39
  export type WarframeErrorParams = Record<string, string | number>;
40
40
  export interface WarframeError {
@@ -266,6 +266,67 @@ declare module "warframe/types/wf/calendar" {
266
266
  days: CalendarDayInfo[];
267
267
  }
268
268
  }
269
+ declare module "warframe/types/wf/event" {
270
+ import type { RawMongoDate } from "warframe/types/wf/nightwave";
271
+ import type { WFRegionShort } from "warframe/types/wf/region";
272
+ export interface RawEventCountedItem {
273
+ ItemType?: string;
274
+ ItemCount?: number;
275
+ type?: string;
276
+ key?: string;
277
+ count?: number;
278
+ }
279
+ export interface RawEventReward {
280
+ items?: string[];
281
+ countedItems?: RawEventCountedItem[];
282
+ credits?: number;
283
+ }
284
+ export interface RawWorldEvent {
285
+ _id?: {
286
+ $oid?: string;
287
+ $id?: string;
288
+ };
289
+ Activation?: RawMongoDate;
290
+ Expiry?: RawMongoDate;
291
+ Node?: string;
292
+ Count?: number;
293
+ Goal?: number;
294
+ HealthPct?: number;
295
+ Desc?: string;
296
+ ToolTip?: string;
297
+ ScoreLocTag?: string;
298
+ Tag?: string;
299
+ Reward?: RawEventReward;
300
+ InterimGoals?: number[];
301
+ InterimRewards?: RawEventReward[];
302
+ }
303
+ export interface EventReward {
304
+ name: string;
305
+ count: number;
306
+ }
307
+ export interface EventInterimStep {
308
+ goal: number;
309
+ rewards: EventReward[];
310
+ }
311
+ export interface EventInfo {
312
+ id: string;
313
+ name: string;
314
+ description?: string;
315
+ scoreLabel?: string;
316
+ node?: WFRegionShort;
317
+ remaining?: string;
318
+ expiry: number;
319
+ currentScore: number;
320
+ maximumScore: number;
321
+ progress?: number;
322
+ rewards: EventReward[];
323
+ interimSteps: EventInterimStep[];
324
+ }
325
+ export interface EventBoard {
326
+ title: string;
327
+ events: EventInfo[];
328
+ }
329
+ }
269
330
  declare module "warframe/types/wf/fissure" {
270
331
  import type { WFRegionShort } from "warframe/types/wf/region";
271
332
  export interface Fissure {
@@ -570,6 +631,7 @@ declare module "warframe/types/index" {
570
631
  export type { Arbitration, ArbitrationShort } from "warframe/types/wf/arbitration";
571
632
  export type { BountyBoard, BountyJob, BountyLocation, BountyReward, BountyRewardRarity, BountyStandingUnit, OracleBountyCycle, OracleBountyEntry, RawSyndicateJob, RawSyndicateMission, } from "warframe/types/wf/bounty";
572
633
  export type { CalendarBoard, CalendarDayInfo, CalendarEventInfo, CalendarEventKind, RawCalendarDay, RawCalendarEvent, RawCalendarSeason, } from "warframe/types/wf/calendar";
634
+ export type { EventBoard, EventInfo, EventInterimStep, EventReward, RawEventCountedItem, RawEventReward, RawWorldEvent, } from "warframe/types/wf/event";
573
635
  export type { Fissure } from "warframe/types/wf/fissure";
574
636
  export type { Invasion, InvasionBoard, InvasionFactionTone, InvasionPlanetGroup, InvasionReward, InvasionSide, RawInvasion, RawInvasionCountedItem, RawInvasionMissionInfo, RawInvasionReward, } from "warframe/types/wf/invasion";
575
637
  export type { NightwaveBoard, NightwaveChallengeInfo, NightwaveChallengeKind, RawMongoDate, RawNightwaveActiveChallenge, RawSeasonInfo, } from "warframe/types/wf/nightwave";
@@ -674,24 +736,14 @@ declare module "warframe/assets/index" {
674
736
  export const BaroParsed: BaroParsedItem[];
675
737
  export const warframeAlias: Record<string, string[]>;
676
738
  }
677
- declare module "warframe/data/wf/arbitrationSchedule" {
678
- import type { ArbitrationShort } from "warframe/types/index";
679
- export const arbitrationSchedule: ArbitrationShort[];
680
- }
681
- declare module "warframe/data/wf/archonHunt" {
682
- export function getArchonHuntModeName(): string;
683
- export function getArchonHuntEnemyLevels(index: number): {
684
- minLevel: number;
685
- maxLevel: number;
686
- };
687
- }
688
739
  declare module "warframe/infrastructure/wf/wf-api" {
689
740
  import type WorldState from 'warframe-worldstate-parser';
690
- import type { OracleBountyCycle, RawCalendarSeason, RawInvasion, RawSeasonInfo, RawSortie, RawSyndicateMission } from "warframe/types/index";
741
+ import type { OracleBountyCycle, RawCalendarSeason, RawInvasion, RawSeasonInfo, RawSortie, RawSyndicateMission, RawWorldEvent } from "warframe/types/index";
691
742
  export function extractSyndicateMissionsRaw(json: string): RawSyndicateMission[];
692
743
  export function extractSeasonInfoRaw(json: string): RawSeasonInfo | undefined;
693
744
  export function extractSortieRaw(json: string): RawSortie | undefined;
694
745
  export function extractInvasionsRaw(json: string): RawInvasion[];
746
+ export function extractEventsRaw(json: string): RawWorldEvent[];
695
747
  export function extractCalendarRaw(json: string): RawCalendarSeason | undefined;
696
748
  export function fetchWorldStateJson(): Promise<string | undefined>;
697
749
  /** browse.wf Oracle bounty cycle (Zariman / Cavia / Hex). */
@@ -713,11 +765,6 @@ declare module "warframe/infrastructure/wf/wf-api" {
713
765
  [itemName: string]: VoidTraderItem;
714
766
  }
715
767
  }
716
- declare module "warframe/data/wf/globalOracleBountyCycle" {
717
- import type { AsyncCache, OracleBountyCycle } from "warframe/types/index";
718
- export let globalOracleBountyCycle: AsyncCache<OracleBountyCycle | undefined>;
719
- export function overrideGlobalOracleBountyCycle(cache: AsyncCache<OracleBountyCycle | undefined>): void;
720
- }
721
768
  declare module "warframe/infrastructure/wf/wf-export-adapter" {
722
769
  import type { IRegion } from 'warframe-public-export-plus';
723
770
  import type { RelicQuality, WFRegionShort } from "warframe/types/index";
@@ -779,43 +826,165 @@ declare module "warframe/infrastructure/wf/wfcd-adapter" {
779
826
  }
780
827
  declare module "warframe/data/wf/globalWorldState" {
781
828
  import type WorldState from 'warframe-worldstate-parser';
782
- import type { Fissure, RawCalendarSeason, RawSeasonInfo, RawSyndicateMission } from "warframe/types/index";
829
+ import type { AsyncCache, Fissure, RawCalendarSeason, RawInvasion, RawSeasonInfo, RawSortie, RawSyndicateMission, RawWorldEvent } from "warframe/types/index";
783
830
  type ParsedFissure = WorldState['fissures'][number];
784
- export function adaptFissure(fissure: ParsedFissure): Promise<Fissure>;
785
- export const globalWorldState: import("warframe").AsyncCache<{
831
+ export interface GlobalWorldStateData {
786
832
  raw: WorldState;
787
833
  syndicateMissionsRaw: RawSyndicateMission[];
788
834
  seasonInfoRaw: RawSeasonInfo | undefined;
789
- sortieRaw: import("warframe").RawSortie | undefined;
790
- invasionsRaw: import("warframe").RawInvasion[];
835
+ sortieRaw: RawSortie | undefined;
836
+ invasionsRaw: RawInvasion[];
791
837
  calendarRaw: RawCalendarSeason | undefined;
838
+ eventsRaw: RawWorldEvent[];
792
839
  fissures: Fissure[];
793
840
  spFissures: Fissure[];
794
841
  rjFissures: Fissure[];
795
- }>;
842
+ }
843
+ export function adaptFissure(fissure: ParsedFissure): Promise<Fissure>;
844
+ export function globalWorldStateFactory(json?: string): Promise<GlobalWorldStateData>;
845
+ export let globalWorldState: AsyncCache<GlobalWorldStateData>;
846
+ export function overrideGlobalWorldState(cache: AsyncCache<GlobalWorldStateData>): void;
847
+ }
848
+ declare module "warframe/infrastructure/wf/bounty-adapter" {
849
+ import type { BountyBoard, BountyLocation, BountyRewardRarity, OracleBountyCycle, RawSyndicateMission } from "warframe/types/index";
850
+ export const bountyLocationTag: Record<BountyLocation, string>;
851
+ /** Locations whose Jobs are empty in official WorldState; use browse.wf Oracle. */
852
+ export const oracleBountyLocations: Set<BountyLocation>;
853
+ /**
854
+ * Map drop probability to 铜/银/金 within one stage.
855
+ * Highest unique probability → bronze, lowest → gold, middle → silver.
856
+ * With only two buckets: highest → bronze, lower → silver.
857
+ */
858
+ export function rarityFromStageProbabilities(probability: number, uniqueSortedDesc: number[]): BountyRewardRarity;
859
+ export function resolveExportItemNameZh(sourceKey: string): string;
860
+ export function adaptBountyBoard(location: BountyLocation, mission: RawSyndicateMission | undefined): BountyBoard | undefined;
861
+ export function findRawSyndicateMission(missions: RawSyndicateMission[], location: BountyLocation): RawSyndicateMission | undefined;
862
+ export function formatOracleChallenge(challengePath: string): string;
863
+ export function adaptOracleBountyBoard(location: 'zariman' | 'cavia' | 'hex', cycle: OracleBountyCycle | undefined): BountyBoard | undefined;
864
+ }
865
+ declare module "warframe/services/wf-service/wf-service.alert" {
866
+ import type { AlertBoard, WarframeResult } from "warframe/types/index";
867
+ export function adaptAlerts(alerts?: readonly {
868
+ expiry?: Date;
869
+ mission?: {
870
+ nodeKey?: string;
871
+ typeKey?: string;
872
+ minEnemyLevel?: number;
873
+ maxEnemyLevel?: number;
874
+ nightmare?: boolean;
875
+ reward?: {
876
+ items?: string[];
877
+ countedItems?: Array<{
878
+ type?: string;
879
+ key?: string;
880
+ count?: number;
881
+ }>;
882
+ credits?: number;
883
+ };
884
+ };
885
+ }[], now?: number): Promise<AlertBoard>;
886
+ export function getAlerts(): Promise<WarframeResult<AlertBoard>>;
887
+ }
888
+ declare module "warframe/data/wf/arbitrationSchedule" {
889
+ import type { ArbitrationShort } from "warframe/types/index";
890
+ export const arbitrationSchedule: ArbitrationShort[];
891
+ }
892
+ declare module "warframe/services/wf-service/wf-service.arbitration" {
893
+ import type { Arbitration, WarframeResult } from "warframe/types/index";
894
+ export function getArbitrations(day?: number): WarframeResult<Arbitration[]>;
895
+ }
896
+ declare module "warframe/data/wf/globalOracleBountyCycle" {
897
+ import type { AsyncCache, OracleBountyCycle } from "warframe/types/index";
898
+ export let globalOracleBountyCycle: AsyncCache<OracleBountyCycle | undefined>;
899
+ export function overrideGlobalOracleBountyCycle(cache: AsyncCache<OracleBountyCycle | undefined>): void;
900
+ }
901
+ declare module "warframe/services/wf-service/wf-service.bounty" {
902
+ import type { BountyBoard, BountyLocation, WarframeResult } from "warframe/types/index";
903
+ export function getBounty(location: BountyLocation): Promise<WarframeResult<BountyBoard>>;
904
+ }
905
+ declare module "warframe/infrastructure/wf/calendar-adapter" {
906
+ import type { CalendarBoard, RawCalendarSeason, RawMongoDate } from "warframe/types/index";
907
+ export function calendarTimestampMs(value?: RawMongoDate): number;
908
+ /** Strip Lotus color pipes and HTML-like markup tags. */
909
+ export function stripLotusMarkup(text: string): string;
910
+ export function adaptCalendar(raw: RawCalendarSeason | undefined, now?: number): CalendarBoard;
911
+ }
912
+ declare module "warframe/services/wf-service/wf-service.calendar" {
913
+ import type { CalendarBoard, RawCalendarSeason, WarframeResult } from "warframe/types/index";
914
+ export function adaptCalendar(raw: RawCalendarSeason | undefined, now?: number): CalendarBoard;
915
+ export function getCalendarFrom(snapshot?: {
916
+ raw?: unknown;
917
+ calendarRaw?: RawCalendarSeason;
918
+ }, now?: number): Promise<WarframeResult<CalendarBoard>>;
919
+ export function getCalendar(): Promise<WarframeResult<CalendarBoard>>;
920
+ }
921
+ declare module "warframe/services/wf-service/wf-service.circuit" {
922
+ export function getCircuitWeek(): {
923
+ currentIncarnons: number;
924
+ currentWarframes: number;
925
+ allIncarnons: string[][];
926
+ allWarframes: string[][];
927
+ };
928
+ }
929
+ declare module "warframe/services/wf-service/wf-service.environment" {
930
+ export function getEnvironment(): Promise<string>;
931
+ }
932
+ declare module "warframe/services/wf-service/wf-service.event" {
933
+ import type { EventBoard, RawWorldEvent, WarframeResult } from "warframe/types/index";
934
+ export function adaptEvents(rawEvents?: readonly RawWorldEvent[], now?: number): EventBoard;
935
+ export function getEventsFrom(snapshot?: {
936
+ raw?: unknown;
937
+ eventsRaw?: RawWorldEvent[];
938
+ }, now?: number): Promise<WarframeResult<EventBoard>>;
939
+ export function getEvents(): Promise<WarframeResult<EventBoard>>;
940
+ }
941
+ declare module "warframe/services/wf-service/wf-service.fissure" {
942
+ import type { Fissure, WarframeResult } from "warframe/types/index";
943
+ export function getFissures(): Promise<WarframeResult<Fissure[]>>;
944
+ export function getSteelPathFissures(): Promise<WarframeResult<Fissure[]>>;
945
+ export function getRailjackFissures(): Promise<WarframeResult<Fissure[]>>;
946
+ }
947
+ declare module "warframe/services/wf-service/wf-service.invasion" {
948
+ import type { InvasionBoard, RawInvasion, WarframeResult } from "warframe/types/index";
949
+ export function adaptInvasions(rawInvasions: RawInvasion[]): Promise<InvasionBoard>;
950
+ export function getInvasionsFrom(snapshot?: {
951
+ raw?: unknown;
952
+ invasionsRaw?: RawInvasion[];
953
+ }): Promise<WarframeResult<InvasionBoard>>;
954
+ export function getInvasions(): Promise<WarframeResult<InvasionBoard>>;
955
+ }
956
+ declare module "warframe/infrastructure/wf/nightwave-adapter" {
957
+ import type { NightwaveBoard, RawSeasonInfo } from "warframe/types/index";
958
+ export function adaptNightwave(raw: RawSeasonInfo, now?: number): NightwaveBoard;
959
+ }
960
+ declare module "warframe/services/wf-service/wf-service.nightwave" {
961
+ import type { NightwaveBoard, RawSeasonInfo, WarframeResult } from "warframe/types/index";
962
+ export function resolveNightwave(raw: RawSeasonInfo | undefined, now?: number): WarframeResult<NightwaveBoard>;
963
+ export function getNightwave(): Promise<WarframeResult<NightwaveBoard>>;
796
964
  }
797
965
  declare module "warframe/data/wf/relics" {
798
966
  import type { Relic } from "warframe/types/index";
799
967
  export const relics: Record<string, Relic>;
800
968
  }
969
+ declare module "warframe/services/wf-service/wf-service.relic" {
970
+ import type { Relic, WarframeResult } from "warframe/types/index";
971
+ export function getRelic(input: string): Promise<WarframeResult<Relic>>;
972
+ }
801
973
  declare module "warframe/data/wf/rivenBaseValues" {
802
- export const rivenAttrValueDict: Record<string, Record<string, number>>;
974
+ export type RivenAttrValueDict = Record<string, Record<string, number>>;
975
+ export function buildRivenAttrValueDict(source: RivenAttrValueDict): RivenAttrValueDict;
976
+ export const rivenAttrValueDict: RivenAttrValueDict;
803
977
  }
804
978
  declare module "warframe/data/wf/rivenDisposition" {
979
+ import type { IWeapon } from 'warframe-public-export-plus';
805
980
  import type { RivenWeaponDisposition } from "warframe/types/index";
981
+ export function buildWeaponRivenDispositionDict(calcWeapons: RivenWeaponDisposition['calc'][], exportWeapons: Record<string, IWeapon>, dictEn: Record<string, string>, dictZh: Record<string, string>): Record<string, RivenWeaponDisposition>;
806
982
  export const weaponRivenDispositionDict: Record<string, RivenWeaponDisposition>;
807
983
  }
808
984
  declare module "warframe/data/wf/rivenStatData" {
809
985
  import type { RivenStatFixFactorMap } from "warframe/types/index";
810
986
  export const rivenStatFixFactor: RivenStatFixFactorMap;
811
987
  }
812
- declare module "warframe/data/wf/sortie" {
813
- export function getSortieModeName(): string;
814
- export function getSortieEnemyLevels(index: number): {
815
- minLevel: number;
816
- maxLevel: number;
817
- };
818
- }
819
988
  declare module "warframe/infrastructure/wfm-client" {
820
989
  import type { WfmApiClient, WfmFetcher, WfmPlugin } from 'wfm-api-client';
821
990
  /** Warframe-local: map request failures to `undefined` (not part of upstream client). */
@@ -952,48 +1121,41 @@ declare module "warframe/infrastructure/ocr-api" {
952
1121
  import type { OcrAPISecret } from "warframe/types/index";
953
1122
  export function extractTextFromImage(image: string | Blob, secret: OcrAPISecret): Promise<string[] | undefined>;
954
1123
  }
955
- declare module "warframe/infrastructure/wf/bounty-adapter" {
956
- import type { BountyBoard, BountyLocation, BountyRewardRarity, OracleBountyCycle, RawSyndicateMission } from "warframe/types/index";
957
- export const bountyLocationTag: Record<BountyLocation, string>;
958
- /** Locations whose Jobs are empty in official WorldState; use browse.wf Oracle. */
959
- export const oracleBountyLocations: Set<BountyLocation>;
960
- /**
961
- * Map drop probability to 铜/银/金 within one stage.
962
- * Highest unique probability → bronze, lowest → gold, middle → silver.
963
- * With only two buckets: highest → bronze, lower → silver.
964
- */
965
- export function rarityFromStageProbabilities(probability: number, uniqueSortedDesc: number[]): BountyRewardRarity;
966
- export function resolveExportItemNameZh(sourceKey: string): string;
967
- export function adaptBountyBoard(location: BountyLocation, mission: RawSyndicateMission | undefined): BountyBoard | undefined;
968
- export function findRawSyndicateMission(missions: RawSyndicateMission[], location: BountyLocation): RawSyndicateMission | undefined;
969
- export function formatOracleChallenge(challengePath: string): string;
970
- export function adaptOracleBountyBoard(location: 'zariman' | 'cavia' | 'hex', cycle: OracleBountyCycle | undefined): BountyBoard | undefined;
971
- }
972
- declare module "warframe/infrastructure/wf/calendar-adapter" {
973
- import type { CalendarBoard, RawCalendarSeason, RawMongoDate } from "warframe/types/index";
974
- export function calendarTimestampMs(value?: RawMongoDate): number;
975
- /** Strip Lotus color pipes and HTML-like markup tags. */
976
- export function stripLotusMarkup(text: string): string;
977
- export function adaptCalendar(raw: RawCalendarSeason | undefined, now?: number): CalendarBoard;
978
- }
979
- declare module "warframe/infrastructure/wf/nightwave-adapter" {
980
- import type { NightwaveBoard, RawSeasonInfo } from "warframe/types/index";
981
- export function adaptNightwave(raw: RawSeasonInfo, now?: number): NightwaveBoard;
982
- }
983
- declare module "warframe/services/wf-service" {
1124
+ declare module "warframe/services/wf-service/wf-service.riven" {
984
1125
  import type { WeeklyRiven } from 'warframe-weekly-rivens';
985
- import type { AlertBoard, Arbitration, ArchiMedea, ArchonHunt, BountyBoard, BountyLocation, CalendarBoard, Fissure, InvasionBoard, NightwaveBoard, OcrAPISecret, RawCalendarSeason, RawInvasion, RawSeasonInfo, RawSortie, RawSteelPathOfferings, Relic, RivenAttribute, RivenStatAnalyzeResult, RivenStatResult, Sortie, SteelEssenceBoard, VoidTrader, WarframeResult } from "warframe/types/index";
1126
+ import type { OcrAPISecret, RivenAttribute, RivenStatAnalyzeResult, RivenStatResult, WarframeResult } from "warframe/types/index";
986
1127
  import { weaponRivenDispositionDict } from "warframe/data/wf/rivenDisposition";
987
- export function getRelic(input: string): Promise<WarframeResult<Relic>>;
988
- export function getArbitrations(day?: number): WarframeResult<Arbitration[]>;
989
- export function adaptArchonHunt(source: {
990
- boss: string;
991
- missions?: Array<{
992
- type: string;
993
- node?: string;
994
- nodeKey: string;
995
- }>;
996
- }): Promise<ArchonHunt>;
1128
+ export function getAnalyzedRiven(secret: OcrAPISecret, url: string): Promise<WarframeResult<RivenStatAnalyzeResult>>;
1129
+ export function filterWeeklyRivens(data: WeeklyRiven[], minPrice: number, minPop?: number): WeeklyRiven[];
1130
+ export function getWeeklyRivens(minPrice: number): Promise<WeeklyRiven[]>;
1131
+ export function getStaticRivenStats(weaponType: string, statType: string, disposition: number): Promise<WarframeResult<RivenStatResult>>;
1132
+ export function getWeaponRivenDisposition(name: string): (typeof weaponRivenDispositionDict)[string] | undefined;
1133
+ export function parseOCRResult(ocrResult: string[]): Promise<{
1134
+ name: string;
1135
+ attributes: {
1136
+ attr: RivenAttribute;
1137
+ value: number;
1138
+ prefix: string;
1139
+ }[];
1140
+ } | undefined>;
1141
+ export function analyzeRivenStat(parseResult: {
1142
+ name: string;
1143
+ attributes: {
1144
+ attr: RivenAttribute;
1145
+ value: number;
1146
+ prefix: string;
1147
+ }[];
1148
+ }): WarframeResult<RivenStatAnalyzeResult>;
1149
+ }
1150
+ declare module "warframe/data/wf/sortie" {
1151
+ export function getSortieModeName(): string;
1152
+ export function getSortieEnemyLevels(index: number): {
1153
+ minLevel: number;
1154
+ maxLevel: number;
1155
+ };
1156
+ }
1157
+ declare module "warframe/services/wf-service/wf-service.sortie" {
1158
+ import type { RawSortie, Sortie, WarframeResult } from "warframe/types/index";
997
1159
  export function adaptSortie(source: RawSortie, dates?: {
998
1160
  activation?: Date;
999
1161
  expiry?: Date;
@@ -1008,53 +1170,9 @@ declare module "warframe/services/wf-service" {
1008
1170
  sortieRaw?: RawSortie;
1009
1171
  }): Promise<WarframeResult<Sortie>>;
1010
1172
  export function getSortie(): Promise<WarframeResult<Sortie>>;
1011
- export function getWeekly(): Promise<WarframeResult<{
1012
- archonHunt: ArchonHunt;
1013
- deepArchimedea: ArchiMedea;
1014
- temporalArchimedea: ArchiMedea;
1015
- }>>;
1016
- export function resolveNightwave(raw: RawSeasonInfo | undefined, now?: number): WarframeResult<NightwaveBoard>;
1017
- export function getNightwave(): Promise<WarframeResult<NightwaveBoard>>;
1018
- export function getEnvironment(): Promise<string>;
1019
- export function getBounty(location: BountyLocation): Promise<WarframeResult<BountyBoard>>;
1020
- export function getCircuitWeek(): {
1021
- currentIncarnons: number;
1022
- currentWarframes: number;
1023
- allIncarnons: string[][];
1024
- allWarframes: string[][];
1025
- };
1026
- export function adaptInvasions(rawInvasions: RawInvasion[]): Promise<InvasionBoard>;
1027
- export function getInvasionsFrom(snapshot?: {
1028
- raw?: unknown;
1029
- invasionsRaw?: RawInvasion[];
1030
- }): Promise<WarframeResult<InvasionBoard>>;
1031
- export function getInvasions(): Promise<WarframeResult<InvasionBoard>>;
1032
- export function adaptAlerts(alerts?: readonly {
1033
- expiry?: Date;
1034
- mission?: {
1035
- nodeKey?: string;
1036
- typeKey?: string;
1037
- minEnemyLevel?: number;
1038
- maxEnemyLevel?: number;
1039
- nightmare?: boolean;
1040
- reward?: {
1041
- items?: string[];
1042
- countedItems?: Array<{
1043
- type?: string;
1044
- key?: string;
1045
- count?: number;
1046
- }>;
1047
- credits?: number;
1048
- };
1049
- };
1050
- }[], now?: number): Promise<AlertBoard>;
1051
- export function getAlerts(): Promise<WarframeResult<AlertBoard>>;
1052
- export function adaptCalendar(raw: RawCalendarSeason | undefined, now?: number): CalendarBoard;
1053
- export function getCalendarFrom(snapshot?: {
1054
- raw?: unknown;
1055
- calendarRaw?: RawCalendarSeason;
1056
- }, now?: number): Promise<WarframeResult<CalendarBoard>>;
1057
- export function getCalendar(): Promise<WarframeResult<CalendarBoard>>;
1173
+ }
1174
+ declare module "warframe/services/wf-service/wf-service.steel-essence" {
1175
+ import type { RawSteelPathOfferings, SteelEssenceBoard, WarframeResult } from "warframe/types/index";
1058
1176
  export function adaptSteelEssence(raw?: RawSteelPathOfferings, now?: number): Promise<SteelEssenceBoard>;
1059
1177
  export function getSteelEssenceFrom(snapshot?: {
1060
1178
  raw?: {
@@ -1062,31 +1180,51 @@ declare module "warframe/services/wf-service" {
1062
1180
  };
1063
1181
  }, now?: number): Promise<WarframeResult<SteelEssenceBoard>>;
1064
1182
  export function getSteelEssence(): Promise<WarframeResult<SteelEssenceBoard>>;
1065
- export function getFissures(): Promise<WarframeResult<Fissure[]>>;
1066
- export function getSteelPathFissures(): Promise<WarframeResult<Fissure[]>>;
1067
- export function getRailjackFissures(): Promise<WarframeResult<Fissure[]>>;
1068
- export function getAnalyzedRiven(secret: OcrAPISecret, url: string): Promise<WarframeResult<RivenStatAnalyzeResult>>;
1183
+ }
1184
+ declare module "warframe/services/wf-service/wf-service.void-trader" {
1185
+ import type { VoidTrader, WarframeResult } from "warframe/types/index";
1069
1186
  export function getVoidTrader(): Promise<WarframeResult<VoidTrader>>;
1070
- export function filterWeeklyRivens(data: WeeklyRiven[], minPrice: number, minPop?: number): WeeklyRiven[];
1071
- export function getWeeklyRivens(minPrice: number): Promise<WeeklyRiven[]>;
1072
- export function getStaticRivenStats(weaponType: string, statType: string, disposition: number): Promise<WarframeResult<RivenStatResult>>;
1073
- export function getWeaponRivenDisposition(name: string): (typeof weaponRivenDispositionDict)[string] | undefined;
1074
- export function parseOCRResult(ocrResult: string[]): Promise<{
1075
- name: string;
1076
- attributes: {
1077
- attr: RivenAttribute;
1078
- value: number;
1079
- prefix: string;
1080
- }[];
1081
- } | undefined>;
1082
- export function analyzeRivenStat(parseResult: {
1083
- name: string;
1084
- attributes: {
1085
- attr: RivenAttribute;
1086
- value: number;
1087
- prefix: string;
1088
- }[];
1089
- }): WarframeResult<RivenStatAnalyzeResult>;
1187
+ }
1188
+ declare module "warframe/data/wf/archonHunt" {
1189
+ export function getArchonHuntModeName(): string;
1190
+ export function getArchonHuntEnemyLevels(index: number): {
1191
+ minLevel: number;
1192
+ maxLevel: number;
1193
+ };
1194
+ }
1195
+ declare module "warframe/services/wf-service/wf-service.weekly" {
1196
+ import type { ArchiMedea, ArchonHunt, WarframeResult } from "warframe/types/index";
1197
+ export function adaptArchonHunt(source: {
1198
+ boss: string;
1199
+ missions?: Array<{
1200
+ type: string;
1201
+ node?: string;
1202
+ nodeKey: string;
1203
+ }>;
1204
+ }): Promise<ArchonHunt>;
1205
+ export function getWeekly(): Promise<WarframeResult<{
1206
+ archonHunt: ArchonHunt;
1207
+ deepArchimedea: ArchiMedea;
1208
+ temporalArchimedea: ArchiMedea;
1209
+ }>>;
1210
+ }
1211
+ declare module "warframe/services/wf-service/index" {
1212
+ export { adaptAlerts, getAlerts } from "warframe/services/wf-service/wf-service.alert";
1213
+ export { getArbitrations } from "warframe/services/wf-service/wf-service.arbitration";
1214
+ export { getBounty } from "warframe/services/wf-service/wf-service.bounty";
1215
+ export { adaptCalendar, getCalendar, getCalendarFrom } from "warframe/services/wf-service/wf-service.calendar";
1216
+ export { getCircuitWeek } from "warframe/services/wf-service/wf-service.circuit";
1217
+ export { getEnvironment } from "warframe/services/wf-service/wf-service.environment";
1218
+ export { adaptEvents, getEvents, getEventsFrom } from "warframe/services/wf-service/wf-service.event";
1219
+ export { getFissures, getRailjackFissures, getSteelPathFissures, } from "warframe/services/wf-service/wf-service.fissure";
1220
+ export { adaptInvasions, getInvasions, getInvasionsFrom } from "warframe/services/wf-service/wf-service.invasion";
1221
+ export { getNightwave, resolveNightwave } from "warframe/services/wf-service/wf-service.nightwave";
1222
+ export { getRelic } from "warframe/services/wf-service/wf-service.relic";
1223
+ export { analyzeRivenStat, filterWeeklyRivens, getAnalyzedRiven, getStaticRivenStats, getWeaponRivenDisposition, getWeeklyRivens, parseOCRResult, } from "warframe/services/wf-service/wf-service.riven";
1224
+ export { adaptSortie, getSortie, getSortieFrom } from "warframe/services/wf-service/wf-service.sortie";
1225
+ export { adaptSteelEssence, getSteelEssence, getSteelEssenceFrom, } from "warframe/services/wf-service/wf-service.steel-essence";
1226
+ export { getVoidTrader } from "warframe/services/wf-service/wf-service.void-trader";
1227
+ export { adaptArchonHunt, getWeekly } from "warframe/services/wf-service/wf-service.weekly";
1090
1228
  }
1091
1229
  declare module "warframe/data/wfm/globalItem" {
1092
1230
  import type { AsyncCache, ItemShort } from "warframe/types/index";
@@ -1165,6 +1303,11 @@ declare module "warframe/services/wfm-service/wfm-service.item-matcher" {
1165
1303
  }
1166
1304
  declare module "warframe/data/wfm/globalDucatnator" {
1167
1305
  import type { AsyncCache, Ducatnator } from "warframe/types/index";
1306
+ interface DucatnatorSnapshot {
1307
+ hour: Ducatnator[];
1308
+ day?: Ducatnator[];
1309
+ }
1310
+ export function globalDucatnatorIDDictFactory(data?: DucatnatorSnapshot): Promise<Record<string, Ducatnator> | undefined>;
1168
1311
  export let globalDucatnatorIDDict: AsyncCache<Record<string, Ducatnator> | undefined>;
1169
1312
  export function overrideGlobalDucatnatorIDDict(cache: AsyncCache<Record<string, Ducatnator> | undefined>): void;
1170
1313
  }
@@ -1209,9 +1352,9 @@ declare module "warframe/services/wfm-service/index" {
1209
1352
  export const primedModHistory: import("warframe").AsyncCache<PrimedModHistoryItem[]>;
1210
1353
  }
1211
1354
  declare module "warframe/services/world-state-refresh" {
1355
+ import type { GlobalWorldStateData } from "warframe/data/wf/globalWorldState";
1212
1356
  import type { VoidTraderItem, WFRegionShort } from "warframe/types/index";
1213
- import { globalWorldState } from "warframe/data/wf/globalWorldState";
1214
- export type WorldStateSnapshot = Awaited<ReturnType<typeof globalWorldState.get>>;
1357
+ export type WorldStateSnapshot = GlobalWorldStateData;
1215
1358
  export type WorldStateNotification = {
1216
1359
  type: 'fissure';
1217
1360
  id: string;
@@ -1254,7 +1397,7 @@ declare module "warframe/services/world-state-refresh" {
1254
1397
  }
1255
1398
  declare module "warframe/services/index" {
1256
1399
  export * from "warframe/services/miscs-service";
1257
- export * from "warframe/services/wf-service";
1400
+ export * from "warframe/services/wf-service/index";
1258
1401
  export * from "warframe/services/wfm-service/index";
1259
1402
  export * from "warframe/services/world-state-refresh";
1260
1403
  }
@@ -1275,6 +1418,7 @@ declare module "i18n" {
1275
1418
  readonly 'bounty.unavailable': "当前该地点暂无可用赏金";
1276
1419
  readonly 'invasion.unavailable': "当前没有入侵";
1277
1420
  readonly 'alert.unavailable': "当前没有警报";
1421
+ readonly 'event.unavailable': "当前没有活动";
1278
1422
  readonly 'calendar.unavailable': "当前没有1999日历";
1279
1423
  readonly 'steelEssence.unavailable': "钢铁精华商店获取失败";
1280
1424
  readonly 'nightwave.unavailable': "当前没有午夜电波";
@@ -1341,7 +1485,7 @@ declare module "utils/index" {
1341
1485
  declare module "components/wf" {
1342
1486
  import type { Element } from 'koishi';
1343
1487
  import type { WeeklyRiven } from 'warframe-weekly-rivens';
1344
- import type { AlertBoard, Arbitration, ArchiMedea, ArchonHunt, BountyBoard, CalendarBoard, Fissure, InvasionBoard, NightwaveBoard, OutputRelic, RivenStatAnalyzeResult, RivenStatResult, Sortie, SteelEssenceBoard, VoidTrader } from "warframe/index";
1488
+ import type { AlertBoard, Arbitration, ArchiMedea, ArchonHunt, BountyBoard, CalendarBoard, EventBoard, Fissure, InvasionBoard, NightwaveBoard, OutputRelic, RivenStatAnalyzeResult, RivenStatResult, Sortie, SteelEssenceBoard, VoidTrader } from "warframe/index";
1345
1489
  export function ArbitrationComponent(arbi: Arbitration[]): Element;
1346
1490
  export function CircuitComponent(currentIncarnons: number, currentWarframes: number, allIncarnons: string[][], allWarframes: string[][]): Element;
1347
1491
  export function FissureComponent(fissures: Fissure[], type: 'fissure' | 'sp-fissure' | 'rj-fissure'): Element;
@@ -1356,6 +1500,7 @@ declare module "components/wf" {
1356
1500
  export function RivenStatComponent(data: RivenStatResult): Element;
1357
1501
  export function VoidTraderComponent(data: VoidTrader): Element;
1358
1502
  export function AlertComponent(board: AlertBoard): Element;
1503
+ export function EventComponent(board: EventBoard): Element;
1359
1504
  export function CalendarComponent(board: CalendarBoard): Element;
1360
1505
  export function SteelEssenceComponent(board: SteelEssenceBoard): Element;
1361
1506
  }
@@ -1369,6 +1514,7 @@ declare module "commands/wf" {
1369
1514
  fissureCommand: (_action: Argv) => Promise<string>;
1370
1515
  invasionCommand: (_action: Argv) => Promise<string>;
1371
1516
  alertCommand: (_action: Argv) => Promise<string>;
1517
+ eventCommand: (_action: Argv) => Promise<string>;
1372
1518
  calendarCommand: (_action: Argv) => Promise<string>;
1373
1519
  steelEssenceCommand: (_action: Argv) => Promise<string>;
1374
1520
  steelPathFissureCommand: (_action: Argv) => Promise<string>;