blockmine 1.19.1 → 1.21.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/.claude/settings.local.json +23 -0
- package/CHANGELOG.md +23 -0
- package/backend/src/core/BotManager.js +34 -4
- package/backend/src/core/BotProcess.js +8 -0
- package/backend/src/core/BreakLoopSignal.js +8 -0
- package/backend/src/core/EventGraphManager.js +5 -0
- package/backend/src/core/GraphExecutionEngine.js +37 -629
- package/backend/src/core/NodeRegistry.js +146 -2
- package/backend/src/core/nodes/action_bot_look_at.js +36 -0
- package/backend/src/core/nodes/action_bot_set_variable.js +32 -0
- package/backend/src/core/nodes/action_http_request.js +98 -0
- package/backend/src/core/nodes/action_send_log.js +23 -0
- package/backend/src/core/nodes/action_send_message.js +32 -0
- package/backend/src/core/nodes/array_add_element.js +23 -0
- package/backend/src/core/nodes/array_contains.js +40 -0
- package/backend/src/core/nodes/array_find_index.js +23 -0
- package/backend/src/core/nodes/array_get_by_index.js +23 -0
- package/backend/src/core/nodes/array_get_random_element.js +32 -0
- package/backend/src/core/nodes/array_remove_by_index.js +30 -0
- package/backend/src/core/nodes/bot_get_position.js +20 -0
- package/backend/src/core/nodes/data_array_literal.js +31 -0
- package/backend/src/core/nodes/data_boolean_literal.js +21 -0
- package/backend/src/core/nodes/data_cast.js +34 -0
- package/backend/src/core/nodes/data_get_argument.js +23 -0
- package/backend/src/core/nodes/data_get_bot_look.js +14 -0
- package/backend/src/core/nodes/data_get_entity_field.js +18 -0
- package/backend/src/core/nodes/data_get_server_players.js +18 -0
- package/backend/src/core/nodes/data_get_user_field.js +40 -0
- package/backend/src/core/nodes/data_get_variable.js +23 -0
- package/backend/src/core/nodes/data_length.js +25 -0
- package/backend/src/core/nodes/data_make_object.js +31 -0
- package/backend/src/core/nodes/data_number_literal.js +21 -0
- package/backend/src/core/nodes/data_string_literal.js +34 -0
- package/backend/src/core/nodes/debug_log.js +16 -0
- package/backend/src/core/nodes/flow_branch.js +15 -0
- package/backend/src/core/nodes/flow_break.js +14 -0
- package/backend/src/core/nodes/flow_for_each.js +39 -0
- package/backend/src/core/nodes/flow_sequence.js +16 -0
- package/backend/src/core/nodes/flow_switch.js +47 -0
- package/backend/src/core/nodes/flow_while.js +64 -0
- package/backend/src/core/nodes/logic_compare.js +33 -0
- package/backend/src/core/nodes/logic_operation.js +35 -0
- package/backend/src/core/nodes/math_operation.js +31 -0
- package/backend/src/core/nodes/math_random_number.js +43 -0
- package/backend/src/core/nodes/object_create.js +40 -0
- package/backend/src/core/nodes/object_delete.js +26 -0
- package/backend/src/core/nodes/object_get.js +23 -0
- package/backend/src/core/nodes/object_has_key.js +30 -0
- package/backend/src/core/nodes/object_set.js +27 -0
- package/backend/src/core/nodes/string_concat.js +27 -0
- package/backend/src/core/nodes/string_contains.js +41 -0
- package/backend/src/core/nodes/string_ends_with.js +43 -0
- package/backend/src/core/nodes/string_equals.js +36 -0
- package/backend/src/core/nodes/string_length.js +36 -0
- package/backend/src/core/nodes/string_matches.js +39 -0
- package/backend/src/core/nodes/string_split.js +37 -0
- package/backend/src/core/nodes/string_starts_with.js +43 -0
- package/backend/src/core/nodes/user_check_blacklist.js +37 -0
- package/backend/src/core/nodes/user_get_groups.js +36 -0
- package/backend/src/core/nodes/user_get_permissions.js +36 -0
- package/backend/src/core/nodes/user_set_blacklist.js +37 -0
- package/frontend/dist/assets/index-B9GedHEa.js +8352 -0
- package/frontend/dist/assets/index-zLiy9MDx.css +1 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package.json +1 -0
- package/nul +0 -0
- package/package.json +1 -1
- package/.kiro/steering/product.md +0 -27
- package/.kiro/steering/structure.md +0 -89
- package/.kiro/steering/tech.md +0 -94
- package/frontend/dist/assets/index-BFd7YoAj.css +0 -1
- package/frontend/dist/assets/index-DxdxTe6I.js +0 -8352
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
3
|
+
* @param {object} context - Контекст выполнения графа.
|
|
4
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
5
|
+
* @param {function} helpers.traverse - Функция для перехода к следующему узлу.
|
|
6
|
+
*/
|
|
7
|
+
async function execute(node, context, helpers) {
|
|
8
|
+
const { traverse } = helpers;
|
|
9
|
+
await traverse(node, 'exec');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
14
|
+
* @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
|
|
15
|
+
* @param {object} context - Контекст выполнения графа.
|
|
16
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
17
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
18
|
+
* @returns {Promise<any>} - Вычисленное значение для выходного пина.
|
|
19
|
+
*/
|
|
20
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
21
|
+
const { resolvePinValue } = helpers;
|
|
22
|
+
|
|
23
|
+
if (pinId === 'result') {
|
|
24
|
+
const str = String(await resolvePinValue(node, 'string', ''));
|
|
25
|
+
const regexStr = String(await resolvePinValue(node, 'regex', ''));
|
|
26
|
+
try {
|
|
27
|
+
return new RegExp(regexStr).test(str);
|
|
28
|
+
} catch (e) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = {
|
|
37
|
+
execute,
|
|
38
|
+
evaluate,
|
|
39
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
3
|
+
* @param {object} context - Контекст выполнения графа.
|
|
4
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
5
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
6
|
+
* @param {function} helpers.traverse - Функция для перехода к следующему узлу.
|
|
7
|
+
*/
|
|
8
|
+
async function execute(node, context, helpers) {
|
|
9
|
+
const { resolvePinValue, traverse } = helpers;
|
|
10
|
+
|
|
11
|
+
await traverse(node, 'exec');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
16
|
+
* @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
|
|
17
|
+
* @param {object} context - Контекст выполнения графа.
|
|
18
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
19
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
20
|
+
* @returns {Promise<any>} - Вычисленное значение для выходного пина.
|
|
21
|
+
*/
|
|
22
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
23
|
+
const { resolvePinValue } = helpers;
|
|
24
|
+
|
|
25
|
+
if (pinId === 'array') {
|
|
26
|
+
const str = String(await resolvePinValue(node, 'string', ''));
|
|
27
|
+
const separator = String(await resolvePinValue(node, 'separator', ''));
|
|
28
|
+
return str.split(separator);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = {
|
|
35
|
+
execute,
|
|
36
|
+
evaluate,
|
|
37
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
3
|
+
* @param {object} context - Контекст выполнения графа.
|
|
4
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
5
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
6
|
+
* @param {function} helpers.traverse - Функция для перехода к следующему узлу.
|
|
7
|
+
*/
|
|
8
|
+
async function execute(node, context, helpers) {
|
|
9
|
+
const { resolvePinValue, traverse } = helpers;
|
|
10
|
+
|
|
11
|
+
await traverse(node, 'exec');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
16
|
+
* @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
|
|
17
|
+
* @param {object} context - Контекст выполнения графа.
|
|
18
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
19
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
20
|
+
* @returns {Promise<any>} - Вычисленное значение для выходного пина.
|
|
21
|
+
*/
|
|
22
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
23
|
+
const { resolvePinValue } = helpers;
|
|
24
|
+
|
|
25
|
+
if (pinId === 'result') {
|
|
26
|
+
const str = String(await resolvePinValue(node, 'string', ''));
|
|
27
|
+
const prefix = String(await resolvePinValue(node, 'prefix', ''));
|
|
28
|
+
const caseSensitive = await resolvePinValue(node, 'case_sensitive', false);
|
|
29
|
+
|
|
30
|
+
if (caseSensitive) {
|
|
31
|
+
return str.startsWith(prefix);
|
|
32
|
+
} else {
|
|
33
|
+
return str.toLowerCase().startsWith(prefix.toLowerCase());
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
module.exports = {
|
|
41
|
+
execute,
|
|
42
|
+
evaluate,
|
|
43
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const User = require('../UserService');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
5
|
+
* @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
|
|
6
|
+
* @param {object} context - Контекст выполнения графа.
|
|
7
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
8
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
9
|
+
* @returns {Promise<any>} - Вычисленное значение для выходного пина.
|
|
10
|
+
*/
|
|
11
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
12
|
+
const { resolvePinValue } = helpers;
|
|
13
|
+
|
|
14
|
+
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
+
let isBlacklisted = false;
|
|
16
|
+
let usernameToFind = null;
|
|
17
|
+
|
|
18
|
+
if (typeof userIdentifier === 'string') {
|
|
19
|
+
usernameToFind = userIdentifier;
|
|
20
|
+
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
+
usernameToFind = userIdentifier.username;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (usernameToFind) {
|
|
25
|
+
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
+
if (user) {
|
|
27
|
+
isBlacklisted = user.isBlacklisted;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Этот узел имеет только один выходной пин данных
|
|
32
|
+
return isBlacklisted;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = {
|
|
36
|
+
evaluate,
|
|
37
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const User = require('../UserService');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
5
|
+
* @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
|
|
6
|
+
* @param {object} context - Контекст выполнения графа.
|
|
7
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
8
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
9
|
+
* @returns {Promise<any>} - Вычисленное значение для выходного пина.
|
|
10
|
+
*/
|
|
11
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
12
|
+
const { resolvePinValue } = helpers;
|
|
13
|
+
|
|
14
|
+
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
+
let groups = [];
|
|
16
|
+
let usernameToFind = null;
|
|
17
|
+
|
|
18
|
+
if (typeof userIdentifier === 'string') {
|
|
19
|
+
usernameToFind = userIdentifier;
|
|
20
|
+
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
+
usernameToFind = userIdentifier.username;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (usernameToFind) {
|
|
25
|
+
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
+
if (user && user.groups) {
|
|
27
|
+
groups = user.groups.map(g => g.group.name);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return groups;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = {
|
|
35
|
+
evaluate,
|
|
36
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const User = require('../UserService');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
5
|
+
* @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
|
|
6
|
+
* @param {object} context - Контекст выполнения графа.
|
|
7
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
8
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
|
|
9
|
+
* @returns {Promise<any>} - Вычисленное значение для выходного пина.
|
|
10
|
+
*/
|
|
11
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
12
|
+
const { resolvePinValue } = helpers;
|
|
13
|
+
|
|
14
|
+
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
+
let permissions = [];
|
|
16
|
+
let usernameToFind = null;
|
|
17
|
+
|
|
18
|
+
if (typeof userIdentifier === 'string') {
|
|
19
|
+
usernameToFind = userIdentifier;
|
|
20
|
+
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
+
usernameToFind = userIdentifier.username;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (usernameToFind) {
|
|
25
|
+
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
+
if (user && user.permissionsSet) {
|
|
27
|
+
permissions = Array.from(user.permissionsSet);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return permissions;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = {
|
|
35
|
+
evaluate,
|
|
36
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const User = require('../UserService');
|
|
2
|
+
const { PrismaClient } = require('@prisma/client');
|
|
3
|
+
const prisma = new PrismaClient();
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
7
|
+
* @param {object} context - Контекст выполнения графа.
|
|
8
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
9
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с пина.
|
|
10
|
+
* @param {function} helpers.traverse - Функция для перехода к следующему узлу.
|
|
11
|
+
* @param {Map} helpers.memo - Карта для мемоизации значений.
|
|
12
|
+
*/
|
|
13
|
+
async function execute(node, context, helpers) {
|
|
14
|
+
const { resolvePinValue, traverse, memo } = helpers;
|
|
15
|
+
|
|
16
|
+
const userObject = await resolvePinValue(node, 'user', null);
|
|
17
|
+
const blacklistStatus = await resolvePinValue(node, 'blacklist_status', false);
|
|
18
|
+
let updatedUser = null;
|
|
19
|
+
|
|
20
|
+
if (userObject && userObject.username) {
|
|
21
|
+
const user = await User.getUser(userObject.username, context.botId);
|
|
22
|
+
if (user) {
|
|
23
|
+
updatedUser = await prisma.user.update({
|
|
24
|
+
where: { id: user.id },
|
|
25
|
+
data: { isBlacklisted: blacklistStatus }
|
|
26
|
+
});
|
|
27
|
+
User.clearCache(userObject.username, context.botId);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
memo.set(`${node.id}:updated_user`, updatedUser);
|
|
32
|
+
await traverse(node, 'exec');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = {
|
|
36
|
+
execute,
|
|
37
|
+
};
|