blockmine 1.16.3 → 1.17.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/CHANGELOG.md +17 -0
- package/backend/prisma/migrations/20250723160648_add_bot_sort_order/migration.sql +2 -0
- package/backend/prisma/schema.prisma +229 -228
- package/backend/src/api/routes/bots.js +2144 -1801
- package/backend/src/api/routes/eventGraphs.js +459 -459
- package/backend/src/core/BotManager.js +901 -876
- package/backend/src/core/BotProcess.js +26 -6
- package/backend/src/core/commands/dev.js +20 -0
- package/frontend/dist/assets/index-BpUwmzIs.js +8347 -0
- package/frontend/dist/assets/index-D3DCCCQP.css +1 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package.json +3 -0
- package/package.json +82 -82
- package/frontend/dist/assets/index-CxCbyhFB.js +0 -8331
- package/frontend/dist/assets/index-_stfadil.css +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
# История версий
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## [1.17.0](https://github.com/blockmineJS/blockmine/compare/v1.16.3...v1.17.0) (2025-07-24)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
### 🐛 Исправления
|
|
8
|
+
|
|
9
|
+
* импорт ботов был улучшен. изменен, переделан, доделан, исправлен ([1a0983b](https://github.com/blockmineJS/blockmine/commit/1a0983bae10953edf1bf695a2451d21529642ce8))
|
|
10
|
+
* прокси теперь подключение теперь работает ([f2ed2b2](https://github.com/blockmineJS/blockmine/commit/f2ed2b2728860aabbed35cd6fc63473fd011550f))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### ✨ Новые возможности
|
|
14
|
+
|
|
15
|
+
* добавлена функция скопировать полный код плагина в редакторе плагина ([91f7a21](https://github.com/blockmineJS/blockmine/commit/91f7a2171826eb59ca933005eaf48581469c0092))
|
|
16
|
+
* плагины теперь могут изменять обработчики при проблемах (нет прав, не тот тип чата и др) ([eeda006](https://github.com/blockmineJS/blockmine/commit/eeda00648e3319aee72995452364d33c1b41b77a))
|
|
17
|
+
* теперь ботов в левом сайдбар меню можно перемещать по позициям ([95ca8dc](https://github.com/blockmineJS/blockmine/commit/95ca8dcd11872e411bb6a5a74bcf981581e9cb51))
|
|
18
|
+
* теперь при большом кол ве ботов, слева появится прокрутка ботов ([4e3c05d](https://github.com/blockmineJS/blockmine/commit/4e3c05dfdcb354e90b42226bf6c4af84ef328612))
|
|
19
|
+
* улучшена обработка настроек плагинов с поддержкой группировки ([cfc24c6](https://github.com/blockmineJS/blockmine/commit/cfc24c60d92cac3a69098f16bacdf3fbbbee2e38))
|
|
20
|
+
|
|
4
21
|
### [1.16.3](https://github.com/blockmineJS/blockmine/compare/v1.16.2...v1.16.3) (2025-07-22)
|
|
5
22
|
|
|
6
23
|
|
|
@@ -1,228 +1,229 @@
|
|
|
1
|
-
generator client {
|
|
2
|
-
provider = "prisma-client-js"
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
datasource db {
|
|
6
|
-
provider = "sqlite"
|
|
7
|
-
url = env("DATABASE_URL")
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
model Server {
|
|
11
|
-
id Int @id @default(autoincrement())
|
|
12
|
-
name String @unique
|
|
13
|
-
host String
|
|
14
|
-
port Int @default(25565)
|
|
15
|
-
version String
|
|
16
|
-
bots Bot[]
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
model Bot {
|
|
20
|
-
id Int @id @default(autoincrement())
|
|
21
|
-
username String @unique
|
|
22
|
-
password String?
|
|
23
|
-
prefix String? @default("@")
|
|
24
|
-
note String?
|
|
25
|
-
owners String? @default("")
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
serverId
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
userId
|
|
164
|
-
|
|
165
|
-
groupId
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
groupId
|
|
173
|
-
|
|
174
|
-
permissionId
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
roleId
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
//
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
datasource db {
|
|
6
|
+
provider = "sqlite"
|
|
7
|
+
url = env("DATABASE_URL")
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
model Server {
|
|
11
|
+
id Int @id @default(autoincrement())
|
|
12
|
+
name String @unique
|
|
13
|
+
host String
|
|
14
|
+
port Int @default(25565)
|
|
15
|
+
version String
|
|
16
|
+
bots Bot[]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
model Bot {
|
|
20
|
+
id Int @id @default(autoincrement())
|
|
21
|
+
username String @unique
|
|
22
|
+
password String?
|
|
23
|
+
prefix String? @default("@")
|
|
24
|
+
note String?
|
|
25
|
+
owners String? @default("")
|
|
26
|
+
sortOrder Int?
|
|
27
|
+
|
|
28
|
+
server Server @relation(fields: [serverId], references: [id])
|
|
29
|
+
serverId Int
|
|
30
|
+
|
|
31
|
+
proxyHost String?
|
|
32
|
+
proxyPort Int?
|
|
33
|
+
proxyUsername String?
|
|
34
|
+
proxyPassword String?
|
|
35
|
+
|
|
36
|
+
installedPlugins InstalledPlugin[]
|
|
37
|
+
users User[]
|
|
38
|
+
groups Group[]
|
|
39
|
+
permissions Permission[]
|
|
40
|
+
commands Command[]
|
|
41
|
+
eventGraphs EventGraph[]
|
|
42
|
+
pluginData PluginDataStore[]
|
|
43
|
+
|
|
44
|
+
createdAt DateTime @default(now())
|
|
45
|
+
updatedAt DateTime @updatedAt
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
model InstalledPlugin {
|
|
50
|
+
id Int @id @default(autoincrement())
|
|
51
|
+
botId Int
|
|
52
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
53
|
+
name String
|
|
54
|
+
version String
|
|
55
|
+
description String?
|
|
56
|
+
sourceType String
|
|
57
|
+
sourceUri String?
|
|
58
|
+
path String
|
|
59
|
+
isEnabled Boolean @default(true)
|
|
60
|
+
|
|
61
|
+
manifest String?
|
|
62
|
+
settings String? @default("{}")
|
|
63
|
+
|
|
64
|
+
createdAt DateTime @default(now())
|
|
65
|
+
|
|
66
|
+
commands Command[]
|
|
67
|
+
eventGraphs EventGraph[]
|
|
68
|
+
|
|
69
|
+
@@unique([botId, name])
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
model Command {
|
|
73
|
+
id Int @id @default(autoincrement())
|
|
74
|
+
botId Int
|
|
75
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
76
|
+
name String
|
|
77
|
+
isEnabled Boolean @default(true)
|
|
78
|
+
cooldown Int @default(0)
|
|
79
|
+
aliases String @default("[]")
|
|
80
|
+
description String?
|
|
81
|
+
owner String?
|
|
82
|
+
permissionId Int?
|
|
83
|
+
permission Permission? @relation(fields: [permissionId], references: [id], onDelete: SetNull)
|
|
84
|
+
allowedChatTypes String @default("[\"chat\", \"private\"]")
|
|
85
|
+
|
|
86
|
+
isVisual Boolean @default(false)
|
|
87
|
+
argumentsJson String? @default("[]")
|
|
88
|
+
graphJson String? @default("null")
|
|
89
|
+
|
|
90
|
+
pluginOwnerId Int?
|
|
91
|
+
pluginOwner InstalledPlugin? @relation(fields: [pluginOwnerId], references: [id], onDelete: SetNull)
|
|
92
|
+
|
|
93
|
+
@@unique([botId, name])
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
model EventGraph {
|
|
97
|
+
id Int @id @default(autoincrement())
|
|
98
|
+
botId Int
|
|
99
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
100
|
+
name String
|
|
101
|
+
isEnabled Boolean @default(true)
|
|
102
|
+
graphJson String? @default("null")
|
|
103
|
+
variables String? @default("[]")
|
|
104
|
+
|
|
105
|
+
triggers EventTrigger[]
|
|
106
|
+
|
|
107
|
+
createdAt DateTime @default(now())
|
|
108
|
+
updatedAt DateTime @updatedAt
|
|
109
|
+
|
|
110
|
+
pluginOwnerId Int?
|
|
111
|
+
pluginOwner InstalledPlugin? @relation(fields: [pluginOwnerId], references: [id], onDelete: SetNull)
|
|
112
|
+
|
|
113
|
+
@@unique([botId, name])
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
model EventTrigger {
|
|
117
|
+
id Int @id @default(autoincrement())
|
|
118
|
+
graphId Int
|
|
119
|
+
graph EventGraph @relation(fields: [graphId], references: [id], onDelete: Cascade)
|
|
120
|
+
eventType String // e.g., "entitySpawn", "chat"
|
|
121
|
+
|
|
122
|
+
@@unique([graphId, eventType])
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
model User {
|
|
126
|
+
id Int @id @default(autoincrement())
|
|
127
|
+
username String
|
|
128
|
+
isBlacklisted Boolean @default(false)
|
|
129
|
+
botId Int
|
|
130
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
131
|
+
groups UserGroup[]
|
|
132
|
+
|
|
133
|
+
@@unique([botId, username])
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
model Group {
|
|
137
|
+
id Int @id @default(autoincrement())
|
|
138
|
+
name String
|
|
139
|
+
owner String @default("system")
|
|
140
|
+
botId Int
|
|
141
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
142
|
+
permissions GroupPermission[]
|
|
143
|
+
users UserGroup[]
|
|
144
|
+
|
|
145
|
+
@@unique([botId, name])
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
model Permission {
|
|
149
|
+
id Int @id @default(autoincrement())
|
|
150
|
+
name String
|
|
151
|
+
description String?
|
|
152
|
+
owner String @default("system")
|
|
153
|
+
botId Int
|
|
154
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
155
|
+
groups GroupPermission[]
|
|
156
|
+
commands Command[]
|
|
157
|
+
|
|
158
|
+
@@unique([botId, name])
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
model UserGroup {
|
|
163
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
164
|
+
userId Int
|
|
165
|
+
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
|
166
|
+
groupId Int
|
|
167
|
+
|
|
168
|
+
@@id([userId, groupId])
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
model GroupPermission {
|
|
172
|
+
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
|
173
|
+
groupId Int
|
|
174
|
+
permission Permission @relation(fields: [permissionId], references: [id], onDelete: Cascade)
|
|
175
|
+
permissionId Int
|
|
176
|
+
|
|
177
|
+
@@id([groupId, permissionId])
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
model ScheduledTask {
|
|
183
|
+
id Int @id @default(autoincrement())
|
|
184
|
+
name String
|
|
185
|
+
cronPattern String?
|
|
186
|
+
action String
|
|
187
|
+
targetBotIds String // джсон массив ID ботов или "ALL"
|
|
188
|
+
payload String? @default("{}") // джсон для доп данных, например, команды
|
|
189
|
+
isEnabled Boolean @default(true)
|
|
190
|
+
runOnStartup Boolean @default(false)
|
|
191
|
+
lastRun DateTime?
|
|
192
|
+
createdAt DateTime @default(now())
|
|
193
|
+
updatedAt DateTime @updatedAt
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
model PanelUser {
|
|
197
|
+
id Int @id @default(autoincrement())
|
|
198
|
+
uuid String @unique @default(uuid())
|
|
199
|
+
username String @unique
|
|
200
|
+
passwordHash String
|
|
201
|
+
role PanelRole @relation(fields: [roleId], references: [id])
|
|
202
|
+
roleId Int
|
|
203
|
+
createdAt DateTime @default(now())
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Роли пользователей (Admin, Moderator, Viewer)
|
|
207
|
+
model PanelRole {
|
|
208
|
+
id Int @id @default(autoincrement())
|
|
209
|
+
name String @unique
|
|
210
|
+
|
|
211
|
+
// Храним права как джсон строку. SQLite не поддерживает массивы.
|
|
212
|
+
// Пример: '[\"bot:create\", \"bot:delete\", \"user:manage\"]'
|
|
213
|
+
permissions String @default("[]")
|
|
214
|
+
users PanelUser[]
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
model PluginDataStore {
|
|
218
|
+
id Int @id @default(autoincrement())
|
|
219
|
+
pluginName String
|
|
220
|
+
botId Int
|
|
221
|
+
key String
|
|
222
|
+
value String // в виде json
|
|
223
|
+
createdAt DateTime @default(now())
|
|
224
|
+
updatedAt DateTime @updatedAt
|
|
225
|
+
|
|
226
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
227
|
+
|
|
228
|
+
@@unique([pluginName, botId, key])
|
|
229
|
+
}
|