@kingsworld/plugin-cron 1.0.0
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/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6 -0
- package/dist/lib/CronTaskHandler.d.ts +9 -0
- package/dist/lib/CronTaskHandler.d.ts.map +1 -0
- package/dist/lib/CronTaskHandler.js +26 -0
- package/dist/lib/CronTaskHandler.js.map +1 -0
- package/dist/lib/structures/CronTask.d.ts +22 -0
- package/dist/lib/structures/CronTask.d.ts.map +1 -0
- package/dist/lib/structures/CronTask.js +48 -0
- package/dist/lib/structures/CronTask.js.map +1 -0
- package/dist/lib/structures/CronTaskStore.d.ts +11 -0
- package/dist/lib/structures/CronTaskStore.d.ts.map +1 -0
- package/dist/lib/structures/CronTaskStore.js +59 -0
- package/dist/lib/structures/CronTaskStore.js.map +1 -0
- package/dist/lib/types/CronTaskTypes.d.ts +6 -0
- package/dist/lib/types/CronTaskTypes.d.ts.map +1 -0
- package/dist/lib/types/CronTaskTypes.js +3 -0
- package/dist/lib/types/CronTaskTypes.js.map +1 -0
- package/dist/register.d.ts +10 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +32 -0
- package/dist/register.js.map +1 -0
- package/dist/register.mjs +4 -0
- package/package.json +79 -0
- package/register.d.ts +1 -0
- package/register.js +4 -0
- package/register.mjs +1 -0
package/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2023 Kings World
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
# @kingsworld/plugin-cron
|
2
|
+
|
3
|
+
A simple [@sapphire/framework](https://www.npmjs.com/package/@sapphire/framework) plugin that aims to make use of the [cron](https://www.npmjs.com/package/cron) package and allow users to make cron jobs within their Sapphire discord bot.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```sh
|
8
|
+
yarn add @kingsworld/plugin-cron @sapphire/framework
|
9
|
+
```
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Make sure to register the plegin before creating the client
|
14
|
+
|
15
|
+
```ts
|
16
|
+
import "@kingsworld/plugin-cron/register";
|
17
|
+
```
|
18
|
+
|
19
|
+
If you would like to set the default cron job timezone for all your cron jobs, you can do so within the client options. A list of TZ identifers can be found on [Wikipedia](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
20
|
+
|
21
|
+
```ts
|
22
|
+
new SapphireClient({
|
23
|
+
...otherClientOptions,
|
24
|
+
cron: {
|
25
|
+
// the cron object is optional
|
26
|
+
defaultTimezone: "Europe/London", // the cron pacakge defaults to UTC
|
27
|
+
},
|
28
|
+
});
|
29
|
+
```
|
30
|
+
|
31
|
+
However, if you would like to do so for a single task, you can do so in the cron task options
|
32
|
+
|
33
|
+
```js
|
34
|
+
{
|
35
|
+
cronTime: "* * * * *", // every minute
|
36
|
+
timeZone: "Europe/London"
|
37
|
+
}
|
38
|
+
```
|
39
|
+
|
40
|
+
### Creating a task
|
41
|
+
|
42
|
+
Cron Tasks come with their own store, just like Sapphire commands, listeners, and so on. They must be located within a `cron-tasks` directory that is located alongside your other stores.
|
43
|
+
|
44
|
+
```
|
45
|
+
src
|
46
|
+
├── listeners
|
47
|
+
| └── ready.ts
|
48
|
+
└── cron-tasks
|
49
|
+
└── ping.ts
|
50
|
+
```
|
51
|
+
|
52
|
+
Using decorators from [@sapphire/decorators](https://www.npmjs.com/package/@sapphire/decorators):
|
53
|
+
|
54
|
+
```ts
|
55
|
+
import { ApplyOptions } from "@sapphire/decorators";
|
56
|
+
import { CronTask } from "@kingsworld/plugin-cron";
|
57
|
+
|
58
|
+
@ApplyOptions<CronTask.Options>({
|
59
|
+
cronTime: "* * * * *",
|
60
|
+
})
|
61
|
+
export class PingPong extends CronTask {
|
62
|
+
run() {
|
63
|
+
this.container.logger.info("Ping Pong! 🏓");
|
64
|
+
}
|
65
|
+
}
|
66
|
+
```
|
67
|
+
|
68
|
+
Using the command constructor:
|
69
|
+
|
70
|
+
```ts
|
71
|
+
import { CronTask } from "@kingsworld/plugin-cron";
|
72
|
+
|
73
|
+
export class PingPong extends CronTask {
|
74
|
+
constructor(context: CronTask.Context, options: CronTask.Options) {
|
75
|
+
super(context, {
|
76
|
+
...options,
|
77
|
+
cronTime: "* * * * *",
|
78
|
+
});
|
79
|
+
}
|
80
|
+
|
81
|
+
run() {
|
82
|
+
this.container.logger.info("Ping Pong! 🏓");
|
83
|
+
}
|
84
|
+
}
|
85
|
+
```
|
86
|
+
|
87
|
+
### Frequently Asked Questions
|
88
|
+
|
89
|
+
##### What does the `this.info()`, `this.error()`, `this.warn()`, `this.debug()`, and `this.trace()` methods do instead the CronTask#run() method?
|
90
|
+
|
91
|
+
These methods are small helpers towards Sapphire's logger that prefixes logs with `CronTask[$name]`. The helpers are optional, however, I find them useful when using them in my own projects.
|
92
|
+
|
93
|
+
```ts
|
94
|
+
export class PingPong extends CronTask {
|
95
|
+
run() {
|
96
|
+
this.info("Ping Pong! 🏓"); // YYYY-MM-DD HH:MM:SS - INFO - CronTask[ping] Ping Pong! 🏓
|
97
|
+
this.error("Ping Pong! 🏓"); // YYYY-MM-DD HH:MM:SS - ERROR - CronTask[ping] Ping Pong! 🏓
|
98
|
+
this.warn("Ping Pong! 🏓"); // YYYY-MM-DD HH:MM:SS - WARN - CronTask[ping] Ping Pong! 🏓
|
99
|
+
this.debug("Ping Pong! 🏓"); // YYYY-MM-DD HH:MM:SS - DEBUG - CronTask[ping] Ping Pong! 🏓
|
100
|
+
this.trace("Ping Pong! 🏓"); // YYYY-MM-DD HH:MM:SS - TRACE - CronTask[ping] Ping Pong! 🏓
|
101
|
+
}
|
102
|
+
}
|
103
|
+
```
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
import "tslib";
|
2
|
+
import type { CronTaskStore } from "./lib/structures/CronTaskStore";
|
3
|
+
import type { CronTaskHandler } from "./lib/CronTaskHandler";
|
4
|
+
import type { CronTaskHandlerOptions } from "./lib/types/CronTaskTypes";
|
5
|
+
export * from "./lib/CronTaskHandler";
|
6
|
+
export * from "./lib/structures/CronTask";
|
7
|
+
export * from "./lib/structures/CronTaskStore";
|
8
|
+
export * from "./lib/types/CronTaskTypes";
|
9
|
+
declare module "@sapphire/pieces" {
|
10
|
+
interface Container {
|
11
|
+
cron: CronTaskHandler;
|
12
|
+
}
|
13
|
+
interface StoreRegistryEntries {
|
14
|
+
"cron-tasks": CronTaskStore;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
declare module "discord.js" {
|
18
|
+
interface ClientOptions {
|
19
|
+
cron?: CronTaskHandlerOptions;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAE1C,OAAO,QAAQ,kBAAkB,CAAC;IAC9B,UAAU,SAAS;QACf,IAAI,EAAE,eAAe,CAAC;KACzB;IAED,UAAU,oBAAoB;QAC1B,YAAY,EAAE,aAAa,CAAC;KAC/B;CACJ;AAED,OAAO,QAAQ,YAAY,CAAC;IACxB,UAAiB,aAAa;QAC1B,IAAI,CAAC,EAAE,sBAAsB,CAAC;KACjC;CACJ"}
|
package/dist/index.js
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
require("tslib");
|
4
|
+
__exportStar(require("./lib/CronTaskHandler"), exports);
|
5
|
+
__exportStar(require("./lib/structures/CronTask"), exports);
|
6
|
+
__exportStar(require("./lib/structures/CronTaskStore"), exports);
|
7
|
+
__exportStar(require("./lib/types/CronTaskTypes"), exports);
|
8
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,iBAAe;AAMf,wDAAsC;AACtC,4DAA0C;AAC1C,iEAA+C;AAC/C,4DAA0C"}
|
package/dist/index.mjs
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
import type { CronTaskHandlerOptions } from "./types/CronTaskTypes";
|
2
|
+
export declare class CronTaskHandler {
|
3
|
+
defaultTimezone?: CronTaskHandlerOptions["defaultTimezone"];
|
4
|
+
constructor(options?: CronTaskHandlerOptions);
|
5
|
+
startAll(): void;
|
6
|
+
stopAll(): void;
|
7
|
+
private get store();
|
8
|
+
}
|
9
|
+
//# sourceMappingURL=CronTaskHandler.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTaskHandler.d.ts","sourceRoot":"","sources":["../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,qBAAa,eAAe;IACxB,eAAe,CAAC,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;gBAEhD,OAAO,CAAC,EAAE,sBAAsB;IAI5C,QAAQ;IAIR,OAAO;IAIP,OAAO,KAAK,KAAK,GAEhB;CACJ"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.CronTaskHandler = void 0;
|
4
|
+
const framework_1 = require("@sapphire/framework");
|
5
|
+
class CronTaskHandler {
|
6
|
+
constructor(options) {
|
7
|
+
Object.defineProperty(this, "defaultTimezone", {
|
8
|
+
enumerable: true,
|
9
|
+
configurable: true,
|
10
|
+
writable: true,
|
11
|
+
value: void 0
|
12
|
+
});
|
13
|
+
this.defaultTimezone = options?.defaultTimezone;
|
14
|
+
}
|
15
|
+
startAll() {
|
16
|
+
this.store.startAll();
|
17
|
+
}
|
18
|
+
stopAll() {
|
19
|
+
this.store.stopAll();
|
20
|
+
}
|
21
|
+
get store() {
|
22
|
+
return framework_1.container.stores.get("cron-tasks");
|
23
|
+
}
|
24
|
+
}
|
25
|
+
exports.CronTaskHandler = CronTaskHandler;
|
26
|
+
//# sourceMappingURL=CronTaskHandler.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTaskHandler.js","sourceRoot":"","sources":["../../src/lib/CronTaskHandler.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAGhD,MAAa,eAAe;IAGxB,YAAY,OAAgC;QAF5C;;;;;WAA4D;QAGxD,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,eAAe,CAAC;IACpD,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED,IAAY,KAAK;QACb,OAAO,qBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;CACJ;AAlBD,0CAkBC"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { Piece } from "@sapphire/pieces";
|
2
|
+
import { CronJob } from "cron";
|
3
|
+
import type { CronTaskStore } from "./CronTaskStore";
|
4
|
+
import type { CronJobOptions } from "../types/CronTaskTypes";
|
5
|
+
export declare abstract class CronTask extends Piece {
|
6
|
+
job: CronJob;
|
7
|
+
store: CronTaskStore;
|
8
|
+
options: CronTask.Options;
|
9
|
+
constructor(context: Piece.Context, options: CronTask.Options);
|
10
|
+
abstract run(): unknown;
|
11
|
+
info(message: string, ...other: unknown[]): void;
|
12
|
+
error(message: string, ...other: unknown[]): void;
|
13
|
+
warn(message: string, ...other: unknown[]): void;
|
14
|
+
debug(message: string, ...other: unknown[]): void;
|
15
|
+
trace(message: string, ...other: unknown[]): void;
|
16
|
+
unload(): Promise<void>;
|
17
|
+
}
|
18
|
+
export declare namespace CronTask {
|
19
|
+
type Options = Piece.Options & CronJobOptions;
|
20
|
+
type Context = Piece.Context;
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=CronTask.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTask.d.ts","sourceRoot":"","sources":["../../../src/lib/structures/CronTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,8BAAsB,QAAS,SAAQ,KAAK;IACxC,GAAG,EAAE,OAAO,CAAC;IAEL,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;gBAEtB,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO;IAY7D,QAAQ,CAAC,GAAG,IAAI,OAAO;IAEvB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAIzC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAI1C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAIzC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAI1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;IAIjC,MAAM;CASlB;AAED,yBAAiB,QAAQ,CAAC;IACtB,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;IACrD,KAAY,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;CACvC"}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.CronTask = void 0;
|
4
|
+
const pieces_1 = require("@sapphire/pieces");
|
5
|
+
const cron_1 = require("cron");
|
6
|
+
class CronTask extends pieces_1.Piece {
|
7
|
+
constructor(context, options) {
|
8
|
+
super(context, options);
|
9
|
+
Object.defineProperty(this, "job", {
|
10
|
+
enumerable: true,
|
11
|
+
configurable: true,
|
12
|
+
writable: true,
|
13
|
+
value: void 0
|
14
|
+
});
|
15
|
+
this.job = new cron_1.CronJob({
|
16
|
+
...options,
|
17
|
+
start: false,
|
18
|
+
context: this,
|
19
|
+
onTick: this.run.bind(this),
|
20
|
+
timeZone: options.timeZone ?? this.container.cron.defaultTimezone
|
21
|
+
});
|
22
|
+
}
|
23
|
+
info(message, ...other) {
|
24
|
+
return this.container.logger.info(`CronTask[${this.name}] ${message}`, ...other);
|
25
|
+
}
|
26
|
+
error(message, ...other) {
|
27
|
+
return this.container.logger.error(`CronTask[${this.name}] ${message}`, ...other);
|
28
|
+
}
|
29
|
+
warn(message, ...other) {
|
30
|
+
return this.container.logger.warn(`CronTask[${this.name}] ${message}`, ...other);
|
31
|
+
}
|
32
|
+
debug(message, ...other) {
|
33
|
+
return this.container.logger.debug(`CronTask[${this.name}] ${message}`, ...other);
|
34
|
+
}
|
35
|
+
trace(message, ...other) {
|
36
|
+
return this.container.logger.trace(`CronTask[${this.name}] ${message}`, ...other);
|
37
|
+
}
|
38
|
+
unload() {
|
39
|
+
// job is undefined when an error occurrs during the CronJob construction
|
40
|
+
// it is not typed as optional because it should never be undefined otherwise
|
41
|
+
if (this.job?.running) {
|
42
|
+
this.job.stop();
|
43
|
+
}
|
44
|
+
return super.unload();
|
45
|
+
}
|
46
|
+
}
|
47
|
+
exports.CronTask = CronTask;
|
48
|
+
//# sourceMappingURL=CronTask.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTask.js","sourceRoot":"","sources":["../../../src/lib/structures/CronTask.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,+BAA+B;AAI/B,MAAsB,QAAS,SAAQ,cAAK;IAMxC,YAAY,OAAsB,EAAE,OAAyB;QACzD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAN5B;;;;;WAAa;QAQT,IAAI,CAAC,GAAG,GAAG,IAAI,cAAO,CAAC;YACnB,GAAG,OAAO;YACV,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe;SACpE,CAAC,CAAC;IACP,CAAC;IAID,IAAI,CAAC,OAAe,EAAE,GAAG,KAAgB;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,KAAgB;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,KAAgB;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,KAAgB;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,KAAgB;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;IACtF,CAAC;IAEQ,MAAM;QACX,yEAAyE;QACzE,6EAA6E;QAC7E,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACnB;QAED,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;CACJ;AAjDD,4BAiDC"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Store } from "@sapphire/pieces";
|
2
|
+
import { CronTask } from "./CronTask";
|
3
|
+
export declare class CronTaskStore extends Store<CronTask> {
|
4
|
+
constructor();
|
5
|
+
startAll(): this;
|
6
|
+
stopAll(): this;
|
7
|
+
set(key: string, value: CronTask): this;
|
8
|
+
delete(key: string): boolean;
|
9
|
+
clear(): void;
|
10
|
+
}
|
11
|
+
//# sourceMappingURL=CronTaskStore.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTaskStore.d.ts","sourceRoot":"","sources":["../../../src/lib/structures/CronTaskStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,qBAAa,aAAc,SAAQ,KAAK,CAAC,QAAQ,CAAC;;IAK9C,QAAQ;IAUR,OAAO;IAUE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI;IAmBvC,MAAM,CAAC,GAAG,EAAE,MAAM;IASlB,KAAK;CAIjB"}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.CronTaskStore = void 0;
|
4
|
+
const pieces_1 = require("@sapphire/pieces");
|
5
|
+
const CronTask_1 = require("./CronTask");
|
6
|
+
const cron_1 = require("cron");
|
7
|
+
class CronTaskStore extends pieces_1.Store {
|
8
|
+
constructor() {
|
9
|
+
super(CronTask_1.CronTask, { name: "cron-tasks" });
|
10
|
+
}
|
11
|
+
startAll() {
|
12
|
+
for (const task of this.values()) {
|
13
|
+
if (!task.enabled)
|
14
|
+
continue;
|
15
|
+
task.job.start();
|
16
|
+
}
|
17
|
+
pieces_1.Store.logger?.(`[STORE => ${this.name}] [START] Started all cronjob tasks.`);
|
18
|
+
return this;
|
19
|
+
}
|
20
|
+
stopAll() {
|
21
|
+
for (const task of this.values()) {
|
22
|
+
if (!task.job.running)
|
23
|
+
continue;
|
24
|
+
task.job.stop();
|
25
|
+
}
|
26
|
+
pieces_1.Store.logger?.(`[STORE => ${this.name}] [STOP] Stopped all cronjob tasks.`);
|
27
|
+
return this;
|
28
|
+
}
|
29
|
+
set(key, value) {
|
30
|
+
const options = value.options;
|
31
|
+
try {
|
32
|
+
value.job = new cron_1.CronJob({
|
33
|
+
...options,
|
34
|
+
start: false,
|
35
|
+
context: value,
|
36
|
+
onTick: value.run.bind(value),
|
37
|
+
timeZone: options.timeZone ?? this.container.cron.defaultTimezone
|
38
|
+
});
|
39
|
+
}
|
40
|
+
catch (error) {
|
41
|
+
value.error("Encountered an error while creating the cron job", error);
|
42
|
+
value.unload();
|
43
|
+
}
|
44
|
+
return super.set(key, value);
|
45
|
+
}
|
46
|
+
delete(key) {
|
47
|
+
const task = this.get(key);
|
48
|
+
if (task?.job.running) {
|
49
|
+
task.job.stop();
|
50
|
+
}
|
51
|
+
return super.delete(key);
|
52
|
+
}
|
53
|
+
clear() {
|
54
|
+
this.stopAll();
|
55
|
+
return super.clear();
|
56
|
+
}
|
57
|
+
}
|
58
|
+
exports.CronTaskStore = CronTaskStore;
|
59
|
+
//# sourceMappingURL=CronTaskStore.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTaskStore.js","sourceRoot":"","sources":["../../../src/lib/structures/CronTaskStore.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,yCAAsC;AACtC,+BAA+B;AAE/B,MAAa,aAAc,SAAQ,cAAe;IAC9C;QACI,KAAK,CAAC,mBAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACJ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;SACpB;QAED,cAAK,CAAC,MAAM,EAAE,CAAC,aAAa,IAAI,CAAC,IAAI,sCAAsC,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE,SAAS;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACnB;QAED,cAAK,CAAC,MAAM,EAAE,CAAC,aAAa,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IAChB,CAAC;IAEQ,GAAG,CAAC,GAAW,EAAE,KAAe;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE9B,IAAI;YACA,KAAK,CAAC,GAAG,GAAG,IAAI,cAAO,CAAC;gBACpB,GAAG,OAAO;gBACV,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe;aACpE,CAAC,CAAC;SACN;QAAC,OAAO,KAAK,EAAE;YACZ,KAAK,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;YACvE,KAAK,CAAC,MAAM,EAAE,CAAC;SAClB;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAEQ,MAAM,CAAC,GAAW;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACnB;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEQ,KAAK;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ;AAzDD,sCAyDC"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import type { CronJobParameters } from "cron";
|
2
|
+
export interface CronTaskHandlerOptions {
|
3
|
+
defaultTimezone?: string;
|
4
|
+
}
|
5
|
+
export type CronJobOptions = Omit<CronJobParameters, "onTick" | "onComplete" | "start" | "context">;
|
6
|
+
//# sourceMappingURL=CronTaskTypes.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTaskTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/types/CronTaskTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAC7B,iBAAiB,EACjB,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAChD,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CronTaskTypes.js","sourceRoot":"","sources":["../../../src/lib/types/CronTaskTypes.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import "./index";
|
2
|
+
import { Plugin, postInitialization, postLogin, preGenericsInitialization, SapphireClient } from "@sapphire/framework";
|
3
|
+
import type { ClientOptions } from "discord.js";
|
4
|
+
export declare class CronTaskPlugin extends Plugin {
|
5
|
+
service: string | undefined;
|
6
|
+
static [preGenericsInitialization](this: SapphireClient, options: ClientOptions): void;
|
7
|
+
static [postInitialization](this: SapphireClient): void;
|
8
|
+
static [postLogin](this: SapphireClient): void;
|
9
|
+
}
|
10
|
+
//# sourceMappingURL=register.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AAEjB,OAAO,EAAa,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAClI,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,qBAAa,cAAe,SAAQ,MAAM;IACtC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa;IAI/E,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,cAAc;IAIhD,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,cAAc;CAG1C"}
|
package/dist/register.js
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.CronTaskPlugin = void 0;
|
4
|
+
require("./index");
|
5
|
+
const framework_1 = require("@sapphire/framework");
|
6
|
+
const CronTaskStore_1 = require("./lib/structures/CronTaskStore");
|
7
|
+
const CronTaskHandler_1 = require("./lib/CronTaskHandler");
|
8
|
+
class CronTaskPlugin extends framework_1.Plugin {
|
9
|
+
constructor() {
|
10
|
+
super(...arguments);
|
11
|
+
Object.defineProperty(this, "service", {
|
12
|
+
enumerable: true,
|
13
|
+
configurable: true,
|
14
|
+
writable: true,
|
15
|
+
value: void 0
|
16
|
+
});
|
17
|
+
}
|
18
|
+
static [framework_1.preGenericsInitialization](options) {
|
19
|
+
framework_1.container.cron = new CronTaskHandler_1.CronTaskHandler(options.cron);
|
20
|
+
}
|
21
|
+
static [framework_1.postInitialization]() {
|
22
|
+
this.stores.register(new CronTaskStore_1.CronTaskStore());
|
23
|
+
}
|
24
|
+
static [framework_1.postLogin]() {
|
25
|
+
framework_1.container.cron.startAll();
|
26
|
+
}
|
27
|
+
}
|
28
|
+
exports.CronTaskPlugin = CronTaskPlugin;
|
29
|
+
framework_1.SapphireClient.plugins.registerPreGenericsInitializationHook(CronTaskPlugin[framework_1.preGenericsInitialization], "Cron-Task-PreGenericsInitialization");
|
30
|
+
framework_1.SapphireClient.plugins.registerPostInitializationHook(CronTaskPlugin[framework_1.postInitialization], "Cron-Task-PostInitialization");
|
31
|
+
framework_1.SapphireClient.plugins.registerPostLoginHook(CronTaskPlugin[framework_1.postLogin], "Cron-Task-PostLogin");
|
32
|
+
//# sourceMappingURL=register.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":";;;AAAA,mBAAiB;AAEjB,mDAAkI;AAGlI,kEAA+D;AAC/D,2DAAwD;AAExD,MAAa,cAAe,SAAQ,kBAAM;IAA1C;;QACI;;;;;WAA4B;IAahC,CAAC;IAXG,MAAM,CAAC,CAAC,qCAAyB,CAAC,CAAuB,OAAsB;QAC3E,qBAAS,CAAC,IAAI,GAAG,IAAI,iCAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,CAAC,8BAAkB,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,6BAAa,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,CAAC,qBAAS,CAAC;QACd,qBAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;CACJ;AAdD,wCAcC;AAED,0BAAc,CAAC,OAAO,CAAC,qCAAqC,CAAC,cAAc,CAAC,qCAAyB,CAAC,EAAE,qCAAqC,CAAC,CAAC;AAE/I,0BAAc,CAAC,OAAO,CAAC,8BAA8B,CAAC,cAAc,CAAC,8BAAkB,CAAC,EAAE,8BAA8B,CAAC,CAAC;AAE1H,0BAAc,CAAC,OAAO,CAAC,qBAAqB,CAAC,cAAc,CAAC,qBAAS,CAAC,EAAE,qBAAqB,CAAC,CAAC"}
|
package/package.json
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
{
|
2
|
+
"name": "@kingsworld/plugin-cron",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"author": "Seren_Modz 21 <seren@kings-world.net>",
|
5
|
+
"license": "MIT",
|
6
|
+
"main": "dist/index.js",
|
7
|
+
"module": "dist/index.mjs",
|
8
|
+
"types": "dist/index.d.ts",
|
9
|
+
"exports": {
|
10
|
+
".": {
|
11
|
+
"import": "./dist/index.mjs",
|
12
|
+
"require": "./dist/index.js",
|
13
|
+
"types": "./dist/index.d.ts"
|
14
|
+
},
|
15
|
+
"./register": {
|
16
|
+
"import": "./register.mjs",
|
17
|
+
"require": "./register.js",
|
18
|
+
"types": "./register.d.ts"
|
19
|
+
}
|
20
|
+
},
|
21
|
+
"sideEffects": [
|
22
|
+
"./dist/register.js",
|
23
|
+
"./register.js",
|
24
|
+
"./register.mjs"
|
25
|
+
],
|
26
|
+
"scripts": {
|
27
|
+
"build": "tsc && yarn esm:register && yarn esm:default",
|
28
|
+
"clean:build": "rimraf dist && yarn build",
|
29
|
+
"esm:register": "gen-esm-wrapper dist/register.js dist/register.mjs",
|
30
|
+
"esm:default": "gen-esm-wrapper dist/index.js dist/index.mjs",
|
31
|
+
"postinstall": "is-ci || husky install"
|
32
|
+
},
|
33
|
+
"dependencies": {
|
34
|
+
"cron": "^2.3.1",
|
35
|
+
"tslib": "^2.6.0"
|
36
|
+
},
|
37
|
+
"devDependencies": {
|
38
|
+
"@commitlint/cli": "^17.6.6",
|
39
|
+
"@commitlint/config-conventional": "^17.6.6",
|
40
|
+
"@sapphire/framework": "^4.5.0",
|
41
|
+
"@sapphire/pieces": "^3.6.3",
|
42
|
+
"@sapphire/ts-config": "^4.0.0",
|
43
|
+
"@types/cron": "^2",
|
44
|
+
"@types/is-ci": "^3",
|
45
|
+
"@types/node": "^20.4.2",
|
46
|
+
"discord.js": "^14.11.0",
|
47
|
+
"gen-esm-wrapper": "^1.1.3",
|
48
|
+
"husky": "^8.0.3",
|
49
|
+
"is-ci": "^3.0.1",
|
50
|
+
"prettier": "^2.8.8",
|
51
|
+
"pretty-quick": "^3.1.3",
|
52
|
+
"typescript": "^5.1.6"
|
53
|
+
},
|
54
|
+
"homepage": "https://github.com/Kings-World/cron-plugin",
|
55
|
+
"repository": "github://Kings-World/cron-plugin",
|
56
|
+
"keywords": [
|
57
|
+
"sapphire",
|
58
|
+
"plugin",
|
59
|
+
"cron",
|
60
|
+
"typescript",
|
61
|
+
"ts",
|
62
|
+
"discord",
|
63
|
+
"yarn",
|
64
|
+
"bot"
|
65
|
+
],
|
66
|
+
"bugs": {
|
67
|
+
"url": "https://github.com/Kings-World/cron-plugin/issues",
|
68
|
+
"email": "seren@kings-world.net"
|
69
|
+
},
|
70
|
+
"files": [
|
71
|
+
"dist/",
|
72
|
+
"!dist/.tsbuildinfo",
|
73
|
+
"./register.*"
|
74
|
+
],
|
75
|
+
"publishConfig": {
|
76
|
+
"access": "public"
|
77
|
+
},
|
78
|
+
"packageManager": "yarn@3.6.1"
|
79
|
+
}
|
package/register.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export * from "./dist/register";
|
package/register.js
ADDED
package/register.mjs
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export * from "./dist/register.mjs";
|