diff --git a/Projects/Superalgos/Icons-SVG-Sources/assets/dogecoin.svg b/Projects/Superalgos/Icons-SVG-Sources/assets/dogecoin.svg
new file mode 100644
index 000000000..433504e34
--- /dev/null
+++ b/Projects/Superalgos/Icons-SVG-Sources/assets/dogecoin.svg
@@ -0,0 +1,89 @@
+
+
diff --git a/Projects/Superalgos/Icons-SVG-Sources/nodes/discord-bot.svg b/Projects/Superalgos/Icons-SVG-Sources/nodes/discord-bot.svg
new file mode 100644
index 000000000..e4ee7ee40
--- /dev/null
+++ b/Projects/Superalgos/Icons-SVG-Sources/nodes/discord-bot.svg
@@ -0,0 +1,88 @@
+
+
diff --git a/Projects/Superalgos/Icons/discord-bot.png b/Projects/Superalgos/Icons/discord-bot.png
index 4f65fe25d..14bfad9d7 100644
Binary files a/Projects/Superalgos/Icons/discord-bot.png and b/Projects/Superalgos/Icons/discord-bot.png differ
diff --git a/Projects/Superalgos/Icons/dogecoin.png b/Projects/Superalgos/Icons/dogecoin.png
new file mode 100644
index 000000000..0c3efe978
Binary files /dev/null and b/Projects/Superalgos/Icons/dogecoin.png differ
diff --git a/Projects/Superalgos/Schemas/App-Schema/announcement.json b/Projects/Superalgos/Schemas/App-Schema/announcement.json
index 6f5599db1..aaba138aa 100644
--- a/Projects/Superalgos/Schemas/App-Schema/announcement.json
+++ b/Projects/Superalgos/Schemas/App-Schema/announcement.json
@@ -23,7 +23,7 @@
"action": "Add UI Object",
"disableIfPropertyIsDefined": true,
"propertyToCheckFor": "announcementCondition",
- "label": "Add Condition",
+ "label": "Add Announcement Condition",
"relatedUiObject": "Announcement Condition",
"actionFunction": "payload.executeAction"
},
diff --git a/Projects/Superalgos/Schemas/App-Schema/asset.json b/Projects/Superalgos/Schemas/App-Schema/asset.json
index ce85882a0..3c76b6777 100644
--- a/Projects/Superalgos/Schemas/App-Schema/asset.json
+++ b/Projects/Superalgos/Schemas/App-Schema/asset.json
@@ -103,6 +103,10 @@
{
"codeName": "XRP",
"iconName": "xrp"
+ },
+ {
+ "codeName": "DOGE",
+ "iconName": "dogecoin"
}
]
}
\ No newline at end of file
diff --git a/Projects/Superalgos/Schemas/App-Schema/discord-bot.json b/Projects/Superalgos/Schemas/App-Schema/discord-bot.json
index 615f623b3..7209448d2 100644
--- a/Projects/Superalgos/Schemas/App-Schema/discord-bot.json
+++ b/Projects/Superalgos/Schemas/App-Schema/discord-bot.json
@@ -32,10 +32,10 @@
"config": "{\n\"webhookURL\": \"Paste the webhook url obtained from Discord > Channel Settings > Integrations > Webhooks > New Webhook\"\n}"
},
"addLeftIcons": true,
- "level": 4,
+ "level": 3,
"attachingRules": {
"compatibleTypes": "->Social Bots->"
},
"childrenNodesProperties": [],
- "propertyNameAtParent": "bots"
+ "propertyNameAtParent": "discordBots"
}
diff --git a/Projects/Superalgos/Schemas/App-Schema/social-bots.json b/Projects/Superalgos/Schemas/App-Schema/social-bots.json
index 48959349b..8b1011846 100644
--- a/Projects/Superalgos/Schemas/App-Schema/social-bots.json
+++ b/Projects/Superalgos/Schemas/App-Schema/social-bots.json
@@ -30,13 +30,13 @@
},
"childrenNodesProperties": [
{
- "name": "bots",
+ "name": "telegramBots",
"type": "array",
"childType": "Telegram Bot",
"autoAdd": true
},
{
- "name": "bots",
+ "name": "discordBots",
"type": "array",
"childType": "Discord Bot",
"autoAdd": true
diff --git a/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json b/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json
index 740537748..6a9829a18 100644
--- a/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json
+++ b/Projects/Superalgos/Schemas/App-Schema/telegram-bot.json
@@ -32,10 +32,10 @@
"config": "{ \n\"botToken\": \"Paste the bot token obtained from Telegram Bot Father\",\n\"chatId\": \"Type or paste the chat or group id -a number with no quotes- where announcements are going to be sent to\"\n}"
},
"addLeftIcons": true,
- "level": 4,
+ "level": 3,
"attachingRules": {
"compatibleTypes": "->Social Bots->"
},
"childrenNodesProperties": [],
- "propertyNameAtParent": "bots"
+ "propertyNameAtParent": "telegramBots"
}
\ No newline at end of file
diff --git a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js
index 75b8b421b..28581db0d 100644
--- a/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js
+++ b/Projects/Superalgos/TS/Bot-Modules/Trading-Bot/Announcements/SocialBots.js
@@ -12,33 +12,39 @@ exports.newSuperalgosBotModulesSocialBots = function (processIndex) {
function initialize() {
if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots !== undefined) {
- if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots !== undefined) {
- for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots.length; i++) {
- let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots[i]
- if (socialBot.type === "Telegram Bot") {
- let config = socialBot.config
- socialBot.botInstance = TS.projects.superalgos.botModules.telegramBot.newSuperalgosBotModulesTelegramBot(processIndex)
- socialBot.botInstance.initialize(config.botToken, config.chatId)
- } else if (socialBot.type === "Discord Bot"){
- let config = socialBot.config
- socialBot.botInstance = TS.projects.superalgos.botModules.discordBot.newSuperalgosBotModulesDiscordBot(processIndex)
- socialBot.botInstance.initialize(config.webhookURL)
+ for (let prop in TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots) {
+ if (prop.toLowerCase().includes("Bots".toLowerCase())) {
+ for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop].length; i++) {
+ let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop][i]
+ if (socialBot.type === "Telegram Bot") {
+ let config = socialBot.config
+ socialBot.botInstance = TS.projects.superalgos.botModules.telegramBot.newSuperalgosBotModulesTelegramBot(processIndex)
+ socialBot.botInstance.initialize(config.botToken, config.chatId)
+ } else if (socialBot.type === "Discord Bot") {
+ let config = socialBot.config
+ socialBot.botInstance = TS.projects.superalgos.botModules.discordBot.newSuperalgosBotModulesDiscordBot(processIndex)
+ socialBot.botInstance.initialize(config.webhookURL)
+ }
}
}
}
function announce(text) {
- if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots !== undefined) {
- for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots.length; i++) {
- let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots[i]
- try {
- if (socialBot.type === "Telegram Bot") {
- socialBot.botInstance.telegramAPI.sendMessage(socialBot.botInstance.chatId, text).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Telegram API error -> err = " + err))
- } else if (socialBot.type === "Discord Bot") {
- socialBot.botInstance.sendMessage(text).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Discord Bot error -> err = " + err))
+ for (let prop in TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots) {
+ if (prop.toLowerCase().includes("Bots".toLowerCase())) {
+ if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop] !== undefined) {
+ for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop].length; i++) {
+ let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop][i]
+ try {
+ if (socialBot.type === "Telegram Bot") {
+ socialBot.botInstance.telegramAPI.sendMessage(socialBot.botInstance.chatId, text).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Telegram API error -> err = " + err))
+ } else if (socialBot.type === "Discord Bot") {
+ socialBot.botInstance.sendMessage(text).catch(err => TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Discord Bot error -> err = " + err))
+ }
+ } catch (err) {
+ TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> announce -> err = " + err.stack);
+ }
}
- } catch (err) {
- TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> announce -> err = " + err.stack);
}
}
}
@@ -50,11 +56,15 @@ exports.newSuperalgosBotModulesSocialBots = function (processIndex) {
function finalize() {
if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots === undefined) { return }
- if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots !== undefined) {
- for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots.length; i++) {
- let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots[i]
- if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot") {
- socialBot.botInstance.finalize()
+ for (let prop in TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots) {
+ if (prop.includes("Bots")) {
+ if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop] !== undefined) {
+ for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop].length; i++) {
+ let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop][i]
+ if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot") {
+ socialBot.botInstance.finalize()
+ }
+ }
}
}
}
@@ -62,11 +72,15 @@ exports.newSuperalgosBotModulesSocialBots = function (processIndex) {
function sendMessage(message) {
if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots !== undefined) {
- if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots !== undefined) {
- for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots.length; i++) {
- let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.bots[i]
- if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot") {
- socialBot.botInstance.sendMessage(message)
+ for (let prop in TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots) {
+ if (prop.includes("Bots")) {
+ if (TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop] !== undefined) {
+ for (let i = 0; i < TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop].length; i++) {
+ let socialBot = TS.projects.superalgos.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop][i]
+ if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot") {
+ socialBot.botInstance.sendMessage(message)
+ }
+ }
}
}
}
diff --git a/Projects/Superalgos/UI/Function-Libraries/LearningSessionFunctions.js b/Projects/Superalgos/UI/Function-Libraries/LearningSessionFunctions.js
index aca2b80b5..fb3835fba 100644
--- a/Projects/Superalgos/UI/Function-Libraries/LearningSessionFunctions.js
+++ b/Projects/Superalgos/UI/Function-Libraries/LearningSessionFunctions.js
@@ -129,7 +129,7 @@ function newSuperalgosFunctionLibraryLearningSessionFunctions() {
'Back Learning Session->Live Learning Session->' +
'Learning Parameters->' +
'Learning Algorithm->Time Range->Time Frame->Heartbeats->User Defined Parameters->' +
- 'Social Bots->Telegram Bot->'
+ 'Social Bots->Telegram Bot->Discord Bot->'
let session = UI.projects.superalgos.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath)
diff --git a/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js b/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js
index b4e025336..3adc57019 100644
--- a/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js
+++ b/Projects/Superalgos/UI/Function-Libraries/TradingSessionFunctions.js
@@ -153,8 +153,8 @@ function newSuperalgosFunctionLibraryTradingSessionFunctions() {
'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' +
'Trading Parameters->' +
'Session Base Asset->Session Quoted Asset->Time Range->Time Frame->Slippage->Fee Structure->Snapshots->Heartbeats->User Defined Parameters->' +
- 'Exchange Account Asset->Asset->' +
- 'Social Bots->Telegram Bot->'
+ 'Social Bots->Telegram Bot->Discord Bot->' +
+ 'Exchange Account Asset->Asset->'
let session = UI.projects.superalgos.functionLibraries.protocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath)