create-gramstax 0.8.1 → 0.8.3
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/dist/src/templates/package.json +1 -1
- package/dist/src/templates/src/core/bot.ts +2 -2
- package/dist/src/templates/src/guards/user.ts +2 -2
- package/dist/src/templates/src/pages/general-status.ts +31 -15
- package/dist/src/templates/src/pages/help.ts +12 -7
- package/dist/src/templates/src/pages/random-number.ts +16 -7
- package/dist/src/templates/src/pages/start.ts +17 -8
- package/dist/src/templates/src/pages/sum-number.ts +77 -56
- package/dist/src/templates/src/pages/username-notfound.ts +13 -4
- package/dist/src/templates/tsconfig.json +0 -2
- package/package.json +1 -1
|
@@ -13,10 +13,10 @@ export class BotCore extends Gramstax {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
async hookErrorPage(ctx: CtxCore, listenerName: string, error: any, isEdit: boolean) {
|
|
16
|
-
await new GeneralStatusPage(ctx).
|
|
16
|
+
await new GeneralStatusPage(ctx).error(`${listenerName}:hookErrorPage`, error, isEdit)
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
async hookErrorInputNotFoundPage(ctx: CtxCore) {
|
|
20
|
-
await new GeneralStatusPage(ctx).
|
|
20
|
+
await new GeneralStatusPage(ctx).errorInputNotFound()
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -4,14 +4,14 @@ import {UserNameNotFoundPage} from "~/pages/username-notfound"
|
|
|
4
4
|
|
|
5
5
|
export class UserGuard extends GuardBase {
|
|
6
6
|
async _catch(err: any, func: any, isEdit: boolean) {
|
|
7
|
-
await new GeneralStatusPage(this).
|
|
7
|
+
await new GeneralStatusPage(this).error(func, err, isEdit)
|
|
8
8
|
return null
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
async ensureUsername(edit: boolean) {
|
|
12
12
|
try {
|
|
13
13
|
if (!this.userName || this.userName.length == 0) {
|
|
14
|
-
await new UserNameNotFoundPage(this).
|
|
14
|
+
await new UserNameNotFoundPage(this).showEntryPoint(edit)
|
|
15
15
|
return null
|
|
16
16
|
}
|
|
17
17
|
return {status: true}
|
|
@@ -2,6 +2,33 @@ import {LogHe} from "~/helpers/log"
|
|
|
2
2
|
import {PageBase} from "~/base/page"
|
|
3
3
|
import {StartPage} from "./start"
|
|
4
4
|
|
|
5
|
+
class Helper {
|
|
6
|
+
static kb(ctx: GeneralStatusPage) {
|
|
7
|
+
return ctx.inlineKeyboardT([StartPage])
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class Alert {
|
|
12
|
+
static async error(ctx: GeneralStatusPage, funcName: string, error: any, edit = true) {
|
|
13
|
+
LogHe.errorMake(error, ctx.constructorName, funcName)
|
|
14
|
+
|
|
15
|
+
await ctx.clearSession()
|
|
16
|
+
const kb = Helper.kb(ctx)
|
|
17
|
+
const da = {isNotFound: false}
|
|
18
|
+
if (edit) {
|
|
19
|
+
await ctx.edit(kb, da)
|
|
20
|
+
} else {
|
|
21
|
+
await ctx.reply(kb, da)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static async errorInputNotFound(ctx: GeneralStatusPage) {
|
|
26
|
+
const kb = Helper.kb(ctx)
|
|
27
|
+
const da = {isNotFound: true}
|
|
28
|
+
await ctx.reply(kb, da)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
5
32
|
export class GeneralStatusPage extends PageBase {
|
|
6
33
|
constructorName?: string
|
|
7
34
|
|
|
@@ -10,23 +37,12 @@ export class GeneralStatusPage extends PageBase {
|
|
|
10
37
|
this.constructorName = p?.constructor?.name
|
|
11
38
|
}
|
|
12
39
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
async toError(funcName: string, error: any, edit = true) {
|
|
18
|
-
LogHe.errorMake(error, this.constructorName, funcName)
|
|
19
|
-
|
|
20
|
-
await this.clearSession()
|
|
21
|
-
const kb = this.kb()
|
|
22
|
-
const da = {isNotFound: false}
|
|
23
|
-
if (edit) await this.edit(kb, da)
|
|
24
|
-
else await this.reply(kb, da)
|
|
40
|
+
async error(...args: Parameters<typeof Alert.error> extends [any, ...infer R] ? R : []) {
|
|
41
|
+
await Alert.error(this, ...args)
|
|
25
42
|
}
|
|
26
43
|
|
|
27
|
-
async
|
|
28
|
-
|
|
29
|
-
await this.reply(kb, {isNotFound: true})
|
|
44
|
+
async errorInputNotFound() {
|
|
45
|
+
await Alert.errorInputNotFound(this)
|
|
30
46
|
}
|
|
31
47
|
|
|
32
48
|
static template = `
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
import {PageBase} from "~/base/page"
|
|
2
2
|
import {StartPage} from "./start"
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
async
|
|
6
|
-
const kb =
|
|
7
|
-
if (edit)
|
|
8
|
-
|
|
4
|
+
class Main {
|
|
5
|
+
static async showEntryPoint(ctx: HelpPage, edit = true) {
|
|
6
|
+
const kb = ctx.inlineKeyboardT([StartPage])
|
|
7
|
+
if (edit) {
|
|
8
|
+
await ctx.edit(kb)
|
|
9
|
+
} else {
|
|
10
|
+
await ctx.reply(kb)
|
|
11
|
+
}
|
|
9
12
|
}
|
|
13
|
+
}
|
|
10
14
|
|
|
15
|
+
export class HelpPage extends PageBase {
|
|
11
16
|
async handleCallbackData() {
|
|
12
|
-
await
|
|
17
|
+
await Main.showEntryPoint(this, true)
|
|
13
18
|
}
|
|
14
19
|
|
|
15
20
|
async handleCommandText() {
|
|
16
|
-
await
|
|
21
|
+
await Main.showEntryPoint(this, false)
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
static template = `
|
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
import {PageBase} from "~/base/page"
|
|
2
2
|
import {StartPage} from "./start"
|
|
3
3
|
|
|
4
|
+
class Main {
|
|
5
|
+
static async showEntryPoint(ctx: RandomNumberPage, edit = true) {
|
|
6
|
+
const kb = ctx.inlineKeyboardT([this, StartPage])
|
|
7
|
+
const da = {result: Math.random() * 10 ** 18}
|
|
8
|
+
if (edit) {
|
|
9
|
+
await ctx.edit(kb, da)
|
|
10
|
+
} else {
|
|
11
|
+
await ctx.reply(kb, da)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
4
16
|
export class RandomNumberPage extends PageBase {
|
|
5
17
|
async handleCallbackData() {
|
|
6
|
-
await
|
|
18
|
+
await Main.showEntryPoint(this, true)
|
|
7
19
|
}
|
|
8
20
|
|
|
9
21
|
async handleCommandText() {
|
|
10
|
-
await
|
|
22
|
+
await Main.showEntryPoint(this, false)
|
|
11
23
|
}
|
|
12
24
|
|
|
13
|
-
async
|
|
14
|
-
|
|
15
|
-
const da = {result: Math.random() * 10 ** 18}
|
|
16
|
-
if (edit) await this.edit(kb, da)
|
|
17
|
-
else await this.reply(kb, da)
|
|
25
|
+
async entryPoint(edit = true) {
|
|
26
|
+
await Main.showEntryPoint(this, edit)
|
|
18
27
|
}
|
|
19
28
|
|
|
20
29
|
static template = `
|
|
@@ -3,21 +3,30 @@ import {PageBase} from "~/base/page"
|
|
|
3
3
|
import {RandomNumberPage} from "./random-number"
|
|
4
4
|
import {SumNumberPage} from "./sum-number"
|
|
5
5
|
|
|
6
|
+
class Main {
|
|
7
|
+
static async showEntryPoint(ctx: StartPage, edit = true) {
|
|
8
|
+
await ctx.clearSession()
|
|
9
|
+
const kb = ctx.inlineKeyboardT([RandomNumberPage, SumNumberPage, HelpPage], `2`)
|
|
10
|
+
const da = {userName: ctx.userName}
|
|
11
|
+
if (edit) {
|
|
12
|
+
await ctx.edit(kb, da)
|
|
13
|
+
} else {
|
|
14
|
+
await ctx.reply(kb, da)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
6
19
|
export class StartPage extends PageBase {
|
|
7
20
|
async handleCallbackData() {
|
|
8
|
-
await
|
|
21
|
+
await Main.showEntryPoint(this, true)
|
|
9
22
|
}
|
|
10
23
|
|
|
11
24
|
async handleCommandText() {
|
|
12
|
-
await
|
|
25
|
+
await Main.showEntryPoint(this, false)
|
|
13
26
|
}
|
|
14
27
|
|
|
15
|
-
async
|
|
16
|
-
await
|
|
17
|
-
const kb = this.inlineKeyboardT([RandomNumberPage, SumNumberPage, HelpPage], `2`)
|
|
18
|
-
const da = {userName: this.userName}
|
|
19
|
-
if (edit) await this.edit(kb, da)
|
|
20
|
-
else await this.reply(kb, da)
|
|
28
|
+
async entryPoint(edit = true) {
|
|
29
|
+
await Main.showEntryPoint(this, edit)
|
|
21
30
|
}
|
|
22
31
|
|
|
23
32
|
static template = `
|
|
@@ -1,79 +1,98 @@
|
|
|
1
1
|
import {PageBase} from "~/base/page"
|
|
2
2
|
import {StartPage} from "./start"
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
static
|
|
4
|
+
class Base {
|
|
5
|
+
static pleft: `pleft`
|
|
6
|
+
static pright: `pright`
|
|
7
|
+
static success: `success`
|
|
8
|
+
}
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
class Helper {
|
|
11
|
+
static getSessionParams(ctx: SumNumberPage) {
|
|
12
|
+
return (ctx.temp.session?.params as {step?: `left` | `right`; left?: number} | undefined) ?? {}
|
|
9
13
|
}
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
static kb(ctx: SumNumberPage, baseId: string) {
|
|
16
|
+
return ctx.inlineKeyboardT([StartPage], `1`, baseId)
|
|
13
17
|
}
|
|
18
|
+
}
|
|
14
19
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
20
|
+
class Main {
|
|
21
|
+
static async showStep1Form(ctx: SumNumberPage, edit: boolean) {
|
|
22
|
+
await ctx.sessionFreeText({step: `left`})
|
|
23
|
+
const bi = Base.pleft
|
|
24
|
+
const kb = Helper.kb(ctx, bi)
|
|
25
|
+
const da = {}
|
|
26
|
+
if (edit) {
|
|
27
|
+
await ctx.edit(kb, da, bi)
|
|
28
|
+
} else {
|
|
29
|
+
await ctx.reply(kb, da, bi)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
21
32
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return await this.reply(kb, {}, bi)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
await this.sessionFreeText({step: `right`, left: value})
|
|
31
|
-
const bi = BASE.pright
|
|
32
|
-
const kb = this.kb(bi)
|
|
33
|
-
return await this.reply(kb, {}, bi)
|
|
33
|
+
static async processStep1Answer(ctx: SumNumberPage, left: number) {
|
|
34
|
+
if (!Number.isFinite(left)) {
|
|
35
|
+
await Main.showStep1Form(ctx, false)
|
|
36
|
+
} else {
|
|
37
|
+
await this.showStep2Form(ctx, left)
|
|
34
38
|
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static async showStep2Form(ctx: SumNumberPage, left: number) {
|
|
42
|
+
await ctx.sessionFreeText({step: `right`, left})
|
|
43
|
+
const bi = Base.pright
|
|
44
|
+
const kb = Helper.kb(ctx, bi)
|
|
45
|
+
const da = {}
|
|
46
|
+
await ctx.reply(kb, da, bi)
|
|
47
|
+
}
|
|
35
48
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (!Number.isFinite(left ?? NaN)) {
|
|
45
|
-
await this.clearSession()
|
|
46
|
-
return await this.first(false)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
await this.clearSession()
|
|
50
|
-
const bi = BASE.result
|
|
51
|
-
const kb = this.kb(bi)
|
|
52
|
-
const da = {result: left! + value}
|
|
53
|
-
await this.reply(kb, da, bi)
|
|
49
|
+
static async processStep2Answer(ctx: SumNumberPage, left: number, right: number) {
|
|
50
|
+
if (!Number.isFinite(right)) {
|
|
51
|
+
await Main.showStep2Form(ctx, right)
|
|
52
|
+
} else if (!Number.isFinite(right ?? NaN)) {
|
|
53
|
+
await ctx.clearSession()
|
|
54
|
+
await Main.showStep1Form(ctx, false)
|
|
55
|
+
} else {
|
|
56
|
+
await Alert.success(ctx, left, right)
|
|
54
57
|
}
|
|
55
58
|
}
|
|
59
|
+
}
|
|
56
60
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const bi =
|
|
61
|
-
const kb =
|
|
61
|
+
class Alert {
|
|
62
|
+
static async success(ctx: SumNumberPage, left: number, right: number) {
|
|
63
|
+
await ctx.clearSession()
|
|
64
|
+
const bi = Base.success
|
|
65
|
+
const kb = Helper.kb(ctx, bi)
|
|
66
|
+
const da = {result: left! + right}
|
|
67
|
+
await ctx.reply(kb, da, bi)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
62
70
|
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
export class SumNumberPage extends PageBase {
|
|
72
|
+
async handleCallbackData() {
|
|
73
|
+
await Main.showStep1Form(this, true)
|
|
65
74
|
}
|
|
66
75
|
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
async handleCommandText() {
|
|
77
|
+
await Main.showStep1Form(this, false)
|
|
69
78
|
}
|
|
70
79
|
|
|
71
|
-
|
|
72
|
-
|
|
80
|
+
async handleFreeText() {
|
|
81
|
+
if (!this.isSessionFreeText()) {
|
|
82
|
+
return null
|
|
83
|
+
}
|
|
84
|
+
const {step, left} = Helper.getSessionParams(this)
|
|
85
|
+
const input = this.msgText?.trim()
|
|
86
|
+
const value = input ? Number(input) : NaN
|
|
87
|
+
if (step === `left`) {
|
|
88
|
+
await Main.processStep1Answer(this, value)
|
|
89
|
+
} else if (step === `right`) {
|
|
90
|
+
await Main.processStep2Answer(this, left!, value)
|
|
91
|
+
}
|
|
73
92
|
}
|
|
74
93
|
|
|
75
94
|
static template = `
|
|
76
|
-
<base id="${
|
|
95
|
+
<base id="${Base.pleft}">
|
|
77
96
|
${this.kbk.cancel()}
|
|
78
97
|
<message>
|
|
79
98
|
<b>📚 Input Left Number</b>
|
|
@@ -86,7 +105,8 @@ export class SumNumberPage extends PageBase {
|
|
|
86
105
|
Contoh: 23
|
|
87
106
|
</message>
|
|
88
107
|
</base>
|
|
89
|
-
|
|
108
|
+
|
|
109
|
+
<base id="${Base.pright}">
|
|
90
110
|
${this.kbk.cancel()}
|
|
91
111
|
<message>
|
|
92
112
|
<b>📚 Input Right Number</b>
|
|
@@ -99,7 +119,8 @@ export class SumNumberPage extends PageBase {
|
|
|
99
119
|
Contoh: 10
|
|
100
120
|
</message>
|
|
101
121
|
</base>
|
|
102
|
-
|
|
122
|
+
|
|
123
|
+
<base id="${Base.success}">
|
|
103
124
|
${this.kbk.home()}
|
|
104
125
|
<message>
|
|
105
126
|
<b>📚 Result Sum</b>
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import {HelpPage} from "./help"
|
|
2
2
|
import {PageBase} from "~/base/page"
|
|
3
3
|
|
|
4
|
+
class Main {
|
|
5
|
+
static async showEntryPoint(ctx: UserNameNotFoundPage, edit = true) {
|
|
6
|
+
const kb = ctx.inlineKeyboardT([HelpPage])
|
|
7
|
+
if (edit) {
|
|
8
|
+
await ctx.edit(kb)
|
|
9
|
+
} else {
|
|
10
|
+
await ctx.reply(kb)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
4
15
|
export class UserNameNotFoundPage extends PageBase {
|
|
5
|
-
async
|
|
6
|
-
|
|
7
|
-
if (edit) await this.edit(kb)
|
|
8
|
-
else await this.reply(kb)
|
|
16
|
+
async showEntryPoint(edit = true) {
|
|
17
|
+
await Main.showEntryPoint(this, edit)
|
|
9
18
|
}
|
|
10
19
|
|
|
11
20
|
static template = `
|