@futdevpro/nts-dynamo 1.14.24 → 1.14.26
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/build/_modules/ai/_services/ai-provider.service-base.d.ts +1 -1
- package/build/_modules/ai/_services/ai-provider.service-base.d.ts.map +1 -1
- package/build/_modules/ai/_services/oai-to-ai-adapter.service.d.ts +39 -0
- package/build/_modules/ai/_services/oai-to-ai-adapter.service.d.ts.map +1 -0
- package/build/_modules/ai/_services/oai-to-ai-adapter.service.js +218 -0
- package/build/_modules/ai/_services/oai-to-ai-adapter.service.js.map +1 -0
- package/build/_modules/assistant/_services/ass-io.control-service.d.ts +4 -3
- package/build/_modules/assistant/_services/ass-io.control-service.d.ts.map +1 -1
- package/build/_modules/assistant/_services/ass-io.control-service.js +6 -6
- package/build/_modules/assistant/_services/ass-io.control-service.js.map +1 -1
- package/build/_modules/assistant/_services/ass-main.control-service.d.ts +2 -2
- package/build/_modules/assistant/_services/ass-main.control-service.d.ts.map +1 -1
- package/build/_modules/assistant/_services/ass.service-base.d.ts +6 -4
- package/build/_modules/assistant/_services/ass.service-base.d.ts.map +1 -1
- package/build/_modules/assistant/_services/ass.service-base.js +6 -4
- package/build/_modules/assistant/_services/ass.service-base.js.map +1 -1
- package/build/_modules/bot/_collections/bot-operations.util.d.ts +13 -13
- package/build/_modules/bot/_collections/bot-operations.util.d.ts.map +1 -1
- package/build/_modules/bot/_collections/bot-operations.util.js.map +1 -1
- package/build/_modules/bot/_enums/bot-message-provider.enum.d.ts +8 -0
- package/build/_modules/bot/_enums/bot-message-provider.enum.d.ts.map +1 -0
- package/build/_modules/bot/_enums/bot-message-provider.enum.js +12 -0
- package/build/_modules/bot/_enums/bot-message-provider.enum.js.map +1 -0
- package/build/_modules/bot/_models/bot-global-settings.interface.d.ts +7 -0
- package/build/_modules/bot/_models/bot-global-settings.interface.d.ts.map +1 -1
- package/build/_modules/bot/_models/bot-message-provider.interface.d.ts +68 -0
- package/build/_modules/bot/_models/bot-message-provider.interface.d.ts.map +1 -0
- package/build/_modules/bot/_models/bot-message-provider.interface.js +3 -0
- package/build/_modules/bot/_models/bot-message-provider.interface.js.map +1 -0
- package/build/_modules/bot/_models/bot-message-wrapper.interface.d.ts +21 -0
- package/build/_modules/bot/_models/bot-message-wrapper.interface.d.ts.map +1 -0
- package/build/_modules/bot/_models/bot-message-wrapper.interface.js +3 -0
- package/build/_modules/bot/_models/bot-message-wrapper.interface.js.map +1 -0
- package/build/_modules/bot/_modules/discord-bot/_collections/dib-operations.util.d.ts +2 -2
- package/build/_modules/bot/_modules/discord-bot/_collections/dib-operations.util.d.ts.map +1 -1
- package/build/_modules/bot/_modules/discord-bot/_collections/dib.util.d.ts +2 -2
- package/build/_modules/bot/_modules/discord-bot/_collections/dib.util.d.ts.map +1 -1
- package/build/_modules/bot/_modules/discord-bot/_collections/dib.util.js.map +1 -1
- package/build/_modules/bot/_modules/discord-bot/_services/dib-message-provider.service.d.ts +56 -0
- package/build/_modules/bot/_modules/discord-bot/_services/dib-message-provider.service.d.ts.map +1 -0
- package/build/_modules/bot/_modules/discord-bot/_services/dib-message-provider.service.js +379 -0
- package/build/_modules/bot/_modules/discord-bot/_services/dib-message-provider.service.js.map +1 -0
- package/build/_modules/bot/_modules/discord-bot/index.d.ts +1 -1
- package/build/_modules/bot/_modules/discord-bot/index.d.ts.map +1 -1
- package/build/_modules/bot/_modules/discord-bot/index.js +1 -1
- package/build/_modules/bot/_modules/discord-bot/index.js.map +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.d.ts +3 -3
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.d.ts.map +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.js.map +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.d.ts +2 -2
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.d.ts.map +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.js.map +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-message-provider.service.d.ts +55 -0
- package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-message-provider.service.d.ts.map +1 -0
- package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-message-provider.service.js +313 -0
- package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-message-provider.service.js.map +1 -0
- package/build/_modules/bot/_modules/dynamo-bot/index.d.ts +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/index.d.ts.map +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/index.js +1 -1
- package/build/_modules/bot/_modules/dynamo-bot/index.js.map +1 -1
- package/build/_modules/bot/_modules/slack-bot/_collections/slb-operations.util.d.ts +2 -2
- package/build/_modules/bot/_modules/slack-bot/_collections/slb-operations.util.d.ts.map +1 -1
- package/build/_modules/bot/_modules/slack-bot/_services/slb-message-provider.service.d.ts +41 -0
- package/build/_modules/bot/_modules/slack-bot/_services/slb-message-provider.service.d.ts.map +1 -0
- package/build/_modules/bot/_modules/slack-bot/_services/slb-message-provider.service.js +119 -0
- package/build/_modules/bot/_modules/slack-bot/_services/slb-message-provider.service.js.map +1 -0
- package/build/_modules/bot/_modules/slack-bot/index.d.ts +1 -1
- package/build/_modules/bot/_modules/slack-bot/index.d.ts.map +1 -1
- package/build/_modules/bot/_modules/slack-bot/index.js +1 -1
- package/build/_modules/bot/_modules/slack-bot/index.js.map +1 -1
- package/build/_modules/bot/_modules/teams-bot/_collections/teb-operations.util.d.ts +2 -2
- package/build/_modules/bot/_modules/teams-bot/_collections/teb-operations.util.d.ts.map +1 -1
- package/build/_modules/bot/_modules/teams-bot/_services/teb-message-provider.service.d.ts +41 -0
- package/build/_modules/bot/_modules/teams-bot/_services/teb-message-provider.service.d.ts.map +1 -0
- package/build/_modules/bot/_modules/teams-bot/_services/teb-message-provider.service.js +119 -0
- package/build/_modules/bot/_modules/teams-bot/_services/teb-message-provider.service.js.map +1 -0
- package/build/_modules/bot/_modules/teams-bot/index.d.ts +1 -1
- package/build/_modules/bot/_modules/teams-bot/index.d.ts.map +1 -1
- package/build/_modules/bot/_modules/teams-bot/index.js +1 -1
- package/build/_modules/bot/_modules/teams-bot/index.js.map +1 -1
- package/build/_modules/bot/_services/bot-commands.control-service.d.ts +4 -3
- package/build/_modules/bot/_services/bot-commands.control-service.d.ts.map +1 -1
- package/build/_modules/bot/_services/bot-commands.control-service.js +3 -2
- package/build/_modules/bot/_services/bot-commands.control-service.js.map +1 -1
- package/build/_modules/bot/_services/bot-io.control-service.d.ts +7 -6
- package/build/_modules/bot/_services/bot-io.control-service.d.ts.map +1 -1
- package/build/_modules/bot/_services/bot-io.control-service.js +38 -17
- package/build/_modules/bot/_services/bot-io.control-service.js.map +1 -1
- package/build/_modules/bot/_services/bot-main.control-service.d.ts +15 -2
- package/build/_modules/bot/_services/bot-main.control-service.d.ts.map +1 -1
- package/build/_modules/bot/_services/bot-main.control-service.js +105 -1
- package/build/_modules/bot/_services/bot-main.control-service.js.map +1 -1
- package/build/_modules/bot/_services/bot-provider-factory.service.d.ts +3 -2
- package/build/_modules/bot/_services/bot-provider-factory.service.d.ts.map +1 -1
- package/build/_modules/bot/_services/bot-provider-factory.service.js +34 -18
- package/build/_modules/bot/_services/bot-provider-factory.service.js.map +1 -1
- package/build/_modules/bot/_services/bot-routines.control-service.d.ts +2 -2
- package/build/_modules/bot/_services/bot-routines.control-service.d.ts.map +1 -1
- package/build/_modules/bot/index.d.ts +3 -2
- package/build/_modules/bot/index.d.ts.map +1 -1
- package/build/_modules/bot/index.js +3 -2
- package/build/_modules/bot/index.js.map +1 -1
- package/package.json +1 -1
- package/src/_modules/ai/_services/ai-provider.service-base.ts +1 -1
- package/src/_modules/assistant/_services/ass-io.control-service.ts +14 -9
- package/src/_modules/assistant/_services/ass-main.control-service.ts +3 -3
- package/src/_modules/assistant/_services/ass.service-base.ts +13 -5
- package/src/_modules/bot/_collections/bot-operations.util.ts +14 -14
- package/src/_modules/bot/_enums/{bot-provider.enum.ts → bot-message-provider.enum.ts} +1 -1
- package/src/_modules/bot/_models/bot-global-settings.interface.ts +9 -0
- package/src/_modules/bot/_models/{bot-provider.interface.ts → bot-message-provider.interface.ts} +10 -7
- package/src/_modules/bot/_models/bot-message-wrapper.interface.ts +31 -0
- package/src/_modules/bot/_modules/discord-bot/_collections/dib-operations.util.ts +2 -2
- package/src/_modules/bot/_modules/discord-bot/_collections/dib.util.ts +2 -2
- package/src/_modules/bot/_modules/discord-bot/_services/{dib-provider.service.ts → dib-message-provider.service.ts} +20 -7
- package/src/_modules/bot/_modules/discord-bot/index.ts +1 -1
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.ts +3 -3
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb.util.ts +2 -2
- package/src/_modules/bot/_modules/dynamo-bot/_services/{dyb-provider.service.ts → dyb-message-provider.service.ts} +12 -8
- package/src/_modules/bot/_modules/dynamo-bot/index.ts +1 -1
- package/src/_modules/bot/_modules/slack-bot/_collections/slb-operations.util.ts +2 -2
- package/src/_modules/bot/_modules/slack-bot/_services/{slb-provider.service.ts → slb-message-provider.service.ts} +11 -7
- package/src/_modules/bot/_modules/slack-bot/index.ts +1 -1
- package/src/_modules/bot/_modules/teams-bot/_collections/teb-operations.util.ts +2 -2
- package/src/_modules/bot/_modules/teams-bot/_services/{teb-provider.service.ts → teb-message-provider.service.ts} +11 -7
- package/src/_modules/bot/_modules/teams-bot/index.ts +1 -1
- package/src/_modules/bot/_services/bot-commands.control-service.ts +8 -6
- package/src/_modules/bot/_services/bot-io.control-service.ts +49 -23
- package/src/_modules/bot/_services/bot-main.control-service.ts +130 -5
- package/src/_modules/bot/_services/bot-provider-factory.service.ts +42 -20
- package/src/_modules/bot/_services/bot-routines.control-service.ts +3 -3
- package/src/_modules/bot/index.ts +3 -2
|
@@ -7,15 +7,16 @@ import { DyNTS_global_settings } from '../../../_collections/global-settings.con
|
|
|
7
7
|
import { DyNTS_Bot_Message } from '../_models/bot-message.interface'
|
|
8
8
|
import { DyNTS_Bot_Channel } from '../_models/bot-channel.interface'
|
|
9
9
|
import { DyNTS_Bot_User } from '../_models/bot-user.interface'
|
|
10
|
-
import {
|
|
10
|
+
import { DyNTS_Bot_MessageProvider } from '../_models/bot-message-provider.interface'
|
|
11
11
|
import { DyNTS_Bot_Global_Settings } from '../_models/bot-global-settings.interface'
|
|
12
|
+
import { DyNTS_Bot_MessageWrapper } from '../_models/bot-message-wrapper.interface'
|
|
12
13
|
import { DyNTS_Msg_Integration_ControlService } from '../../messaging/_services/msg-integration.control-service'
|
|
13
14
|
|
|
14
15
|
export abstract class DyNTS_Bot_IO_ControlService<
|
|
15
16
|
T_PlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
|
|
16
17
|
T_PlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
|
|
17
18
|
T_PlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
|
|
18
|
-
T_PlatformProvider extends
|
|
19
|
+
T_PlatformProvider extends DyNTS_Bot_MessageProvider<T_PlatformChannel, T_PlatformMessage, T_PlatformUser> = DyNTS_Bot_MessageProvider<T_PlatformChannel, T_PlatformMessage, T_PlatformUser>
|
|
19
20
|
> extends DyNTS_SingletonService {
|
|
20
21
|
|
|
21
22
|
protected abstract getMainBotControlService(): DyNTS_Bot_Main_ControlService<T_PlatformChannel, T_PlatformMessage, T_PlatformUser, T_PlatformProvider>;
|
|
@@ -64,27 +65,41 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
async handleNewMessage(
|
|
68
|
+
async handleNewMessage(wrapperOrMessage: DyNTS_Bot_MessageWrapper<T_PlatformMessage> | T_PlatformMessage, issuer: string): Promise<void> {
|
|
69
|
+
// Declare variables outside try-catch for error handling
|
|
70
|
+
let wrapper: DyNTS_Bot_MessageWrapper<T_PlatformMessage>;
|
|
71
|
+
let message: T_PlatformMessage;
|
|
72
|
+
|
|
68
73
|
try {
|
|
74
|
+
// Support both wrapped messages (multi-provider) and unwrapped (backward compatibility)
|
|
75
|
+
const isWrapper = 'message' in wrapperOrMessage && 'providerId' in wrapperOrMessage;
|
|
76
|
+
wrapper = isWrapper ? wrapperOrMessage as DyNTS_Bot_MessageWrapper<T_PlatformMessage> : {
|
|
77
|
+
message: wrapperOrMessage as T_PlatformMessage,
|
|
78
|
+
providerId: 'default',
|
|
79
|
+
providerType: this.provider.getProviderName() as any,
|
|
80
|
+
provider: this.provider
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
message = wrapper.message;
|
|
69
84
|
const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Global_Settings;
|
|
70
85
|
|
|
71
86
|
if (botSettings?.debugLevel >= 1) {
|
|
72
|
-
DyFM_Log.H_log(`incoming message (${message.authorDisplayName}):\n${message.content}`)
|
|
87
|
+
DyFM_Log.H_log(`incoming message (${message.authorDisplayName}) [${wrapper.providerId}]:\n${message.content}`)
|
|
73
88
|
}
|
|
74
89
|
|
|
75
|
-
const isForYou = await this.getMessageIsForBotToHandle(message, issuer);
|
|
90
|
+
const isForYou = await this.getMessageIsForBotToHandle(message, wrapper, issuer);
|
|
76
91
|
|
|
77
92
|
if (!isForYou) {
|
|
78
93
|
return;
|
|
79
94
|
}
|
|
80
95
|
|
|
81
|
-
const isHandledAsCommand = await this.handleIfCommand(message, issuer);
|
|
96
|
+
const isHandledAsCommand = await this.handleIfCommand(message, wrapper, issuer);
|
|
82
97
|
|
|
83
98
|
if (isHandledAsCommand) {
|
|
84
99
|
return;
|
|
85
100
|
}
|
|
86
101
|
|
|
87
|
-
await this.handleMessage(message, issuer);
|
|
102
|
+
await this.handleMessage(message, wrapper, issuer);
|
|
88
103
|
|
|
89
104
|
// Sync message to messaging system if enabled
|
|
90
105
|
try {
|
|
@@ -94,7 +109,7 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
94
109
|
// Find or create conversation for this channel
|
|
95
110
|
const conversation = await messagingIntegration.findOrCreateBotConversation(
|
|
96
111
|
message.channelId,
|
|
97
|
-
|
|
112
|
+
wrapper.providerType,
|
|
98
113
|
issuer
|
|
99
114
|
);
|
|
100
115
|
|
|
@@ -115,14 +130,20 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
115
130
|
const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Global_Settings;
|
|
116
131
|
|
|
117
132
|
if (!this.dontSendErrorReply && botSettings?.debugLevel >= 1) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
133
|
+
// Use wrapper if available, fallback to default provider
|
|
134
|
+
const errorProvider = wrapper?.provider || this.provider;
|
|
135
|
+
const errorMessage = wrapper?.message || message;
|
|
136
|
+
|
|
137
|
+
if (errorProvider && errorMessage) {
|
|
138
|
+
await errorProvider.replyToMessage(
|
|
139
|
+
errorMessage.id,
|
|
140
|
+
errorMessage.channelId,
|
|
141
|
+
`[SYSTEM|ERROR|${DyNTS_global_settings.systemShortCodeName}|DyNTS-Bot-IO-H0] Error occurred while handling the message:\n` +
|
|
142
|
+
DyFM_Error.getAnyMessage(error)
|
|
143
|
+
).catch(err => {
|
|
144
|
+
DyFM_Error.logSimple('❌❌ Error sending message to report channel:', err);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
126
147
|
}
|
|
127
148
|
|
|
128
149
|
throw new DyFM_Error({
|
|
@@ -132,17 +153,19 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
132
153
|
}
|
|
133
154
|
}
|
|
134
155
|
|
|
135
|
-
abstract handleMessage(message: T_PlatformMessage, issuer: string): Promise<T_PlatformMessage>;
|
|
156
|
+
abstract handleMessage(message: T_PlatformMessage, wrapper: DyNTS_Bot_MessageWrapper<T_PlatformMessage>, issuer: string): Promise<T_PlatformMessage>;
|
|
136
157
|
|
|
137
158
|
async getMessageIsForBotToHandle(
|
|
138
159
|
message: T_PlatformMessage,
|
|
160
|
+
wrapper: DyNTS_Bot_MessageWrapper<T_PlatformMessage>,
|
|
139
161
|
issuer: string,
|
|
140
162
|
dontRemovePing?: boolean
|
|
141
163
|
): Promise<boolean> {
|
|
142
164
|
try {
|
|
143
165
|
const botSettings = DyNTS_global_settings.bot_settings as DyNTS_Bot_Global_Settings;
|
|
144
166
|
|
|
145
|
-
|
|
167
|
+
const provider = wrapper.provider || this.provider;
|
|
168
|
+
if (!provider || !this.mainBot_CS || !this.botClientId) {
|
|
146
169
|
DyFM_Log.H_error(
|
|
147
170
|
'🚫❌ Bot not initialized yet. END wont respond to message:', message.content,
|
|
148
171
|
new Error('Bot not initialized yet').stack
|
|
@@ -184,7 +207,8 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
184
207
|
}
|
|
185
208
|
|
|
186
209
|
if (!isOwnMessage && isPinged) {
|
|
187
|
-
this.provider
|
|
210
|
+
const provider = wrapper.provider || this.provider;
|
|
211
|
+
provider.replyToMessage(
|
|
188
212
|
message.id,
|
|
189
213
|
message.channelId,
|
|
190
214
|
`[SYSTEM|REFUSE|CHANNEL] I'm sorry, but I'm not allowed to answer you in this channel!`
|
|
@@ -221,7 +245,8 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
221
245
|
) {
|
|
222
246
|
if (isPinged && botSettings?.debugLevel >= 2) {
|
|
223
247
|
DyFM_Log.warn('🚫🤖❌ not for me; this message is from a bot')
|
|
224
|
-
this.provider
|
|
248
|
+
const provider = wrapper.provider || this.provider;
|
|
249
|
+
provider.replyToMessage(
|
|
225
250
|
message.id,
|
|
226
251
|
message.channelId,
|
|
227
252
|
'[SYSTEM|REFUSE|BOT] You should not ping me!'
|
|
@@ -247,7 +272,8 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
247
272
|
if (!isAllowedUser) {
|
|
248
273
|
if (botSettings?.debugLevel >= 2) {
|
|
249
274
|
DyFM_Log.warn('🚫❌ not allowed user. END', message.authorName, message.authorDisplayName)
|
|
250
|
-
this.provider
|
|
275
|
+
const provider = wrapper.provider || this.provider;
|
|
276
|
+
provider.replyToMessage(
|
|
251
277
|
message.id,
|
|
252
278
|
message.channelId,
|
|
253
279
|
`[SYSTEM|REFUSE|USER] I'm sorry, but I'm not allowed to answer you!`
|
|
@@ -274,12 +300,12 @@ export abstract class DyNTS_Bot_IO_ControlService<
|
|
|
274
300
|
}
|
|
275
301
|
}
|
|
276
302
|
|
|
277
|
-
async handleIfCommand(message: T_PlatformMessage, issuer: string): Promise<boolean> {
|
|
303
|
+
async handleIfCommand(message: T_PlatformMessage, wrapper: DyNTS_Bot_MessageWrapper<T_PlatformMessage>, issuer: string): Promise<boolean> {
|
|
278
304
|
try {
|
|
279
305
|
const isCommand = await this.isCommand(message, issuer);
|
|
280
306
|
|
|
281
307
|
if (isCommand) {
|
|
282
|
-
await this.commands_CS.handleCommand(message, issuer);
|
|
308
|
+
await this.commands_CS.handleCommand(message, wrapper, issuer);
|
|
283
309
|
}
|
|
284
310
|
|
|
285
311
|
return Boolean(isCommand);
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { DyNTS_SingletonService } from '../../../_services/base/singleton.service';
|
|
2
2
|
import { DyFM_Async, DyFM_Error, DyFM_Log } from '@futdevpro/fsm-dynamo';
|
|
3
3
|
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
4
|
-
import {
|
|
4
|
+
import { DyNTS_Bot_MessageProvider, DyNTS_Bot_MessageProvider_Config } from '../_models/bot-message-provider.interface';
|
|
5
5
|
import { DyNTS_Bot_Message } from '../_models/bot-message.interface';
|
|
6
6
|
import { DyNTS_Bot_Channel } from '../_models/bot-channel.interface';
|
|
7
7
|
import { DyNTS_Bot_User } from '../_models/bot-user.interface';
|
|
8
|
-
import { DyNTS_Bot_Global_Settings } from '../_models/bot-global-settings.interface';
|
|
8
|
+
import { DyNTS_Bot_Global_Settings, DyNTS_Bot_Settings } from '../_models/bot-global-settings.interface';
|
|
9
9
|
import { DyNTS_GlobalService } from '../../../_services/core/global.service';
|
|
10
10
|
import { DyNTS_Bot_IO_ControlService } from './bot-io.control-service';
|
|
11
11
|
import { DyNTS_Bot_Routines_ControlService } from './bot-routines.control-service';
|
|
12
|
+
import { DyNTS_Bot_MessageWrapper } from '../_models/bot-message-wrapper.interface';
|
|
13
|
+
import { DyNTS_Bot_Provider_Factory } from './bot-provider-factory.service';
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* This is the main control service for the Bot.
|
|
@@ -25,11 +27,11 @@ export abstract class DyNTS_Bot_Main_ControlService<
|
|
|
25
27
|
T_PlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
|
|
26
28
|
T_PlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
|
|
27
29
|
T_PlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
|
|
28
|
-
T_PlatformProvider extends
|
|
30
|
+
T_PlatformProvider extends DyNTS_Bot_MessageProvider<
|
|
29
31
|
T_PlatformChannel,
|
|
30
32
|
T_PlatformMessage,
|
|
31
33
|
T_PlatformUser
|
|
32
|
-
> =
|
|
34
|
+
> = DyNTS_Bot_MessageProvider<
|
|
33
35
|
T_PlatformChannel,
|
|
34
36
|
T_PlatformMessage,
|
|
35
37
|
T_PlatformUser
|
|
@@ -37,11 +39,20 @@ export abstract class DyNTS_Bot_Main_ControlService<
|
|
|
37
39
|
> extends DyNTS_SingletonService {
|
|
38
40
|
|
|
39
41
|
protected _provider: T_PlatformProvider;
|
|
42
|
+
protected _providers: Map<string, T_PlatformProvider> = new Map();
|
|
40
43
|
|
|
41
44
|
get provider(): T_PlatformProvider {
|
|
42
45
|
return this._provider;
|
|
43
46
|
}
|
|
44
47
|
|
|
48
|
+
get providers(): Map<string, T_PlatformProvider> {
|
|
49
|
+
return this._providers;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getProviderById(providerId: string): T_PlatformProvider | undefined {
|
|
53
|
+
return this._providers.get(providerId);
|
|
54
|
+
}
|
|
55
|
+
|
|
45
56
|
get botClientId(): string {
|
|
46
57
|
return this.provider?.getBotId() ?? DyNTS_global_settings?.bot_settings?.discord?.clientId;
|
|
47
58
|
}
|
|
@@ -112,11 +123,39 @@ export abstract class DyNTS_Bot_Main_ControlService<
|
|
|
112
123
|
}
|
|
113
124
|
}
|
|
114
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Check if the bot is configured for multiple providers
|
|
128
|
+
*/
|
|
129
|
+
protected isMultiProviderMode(): boolean {
|
|
130
|
+
const settings = DyNTS_global_settings.bot_settings as any;
|
|
131
|
+
return Array.isArray(settings?.providers) && settings.providers.length > 0;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get all provider configurations (supports both single and multi-provider mode)
|
|
136
|
+
*/
|
|
137
|
+
protected getProviderConfigs(): DyNTS_Bot_MessageProvider_Config[] {
|
|
138
|
+
const settings = DyNTS_global_settings.bot_settings as any;
|
|
139
|
+
|
|
140
|
+
if (this.isMultiProviderMode()) {
|
|
141
|
+
return settings.providers;
|
|
142
|
+
} else {
|
|
143
|
+
// Single provider mode - wrap existing config
|
|
144
|
+
const config = settings as DyNTS_Bot_MessageProvider_Config;
|
|
145
|
+
if (!config.providerId) {
|
|
146
|
+
config.providerId = config.messageProvider || 'default';
|
|
147
|
+
}
|
|
148
|
+
return [config];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
115
152
|
async setup(issuer: string): Promise<void> {
|
|
116
153
|
try {
|
|
117
154
|
await DyFM_Async.delay(100);
|
|
118
155
|
|
|
119
|
-
|
|
156
|
+
const configs = this.getProviderConfigs();
|
|
157
|
+
|
|
158
|
+
if (configs.length === 0) {
|
|
120
159
|
throw new Error(
|
|
121
160
|
`No bot provider configured!` +
|
|
122
161
|
`\nPlease set the provider in DyNTS_global_settings.bot_settings.provider` +
|
|
@@ -124,6 +163,13 @@ export abstract class DyNTS_Bot_Main_ControlService<
|
|
|
124
163
|
);
|
|
125
164
|
}
|
|
126
165
|
|
|
166
|
+
// If multi-provider mode, initialize all providers
|
|
167
|
+
if (this.isMultiProviderMode()) {
|
|
168
|
+
await this.setupMultipleProviders(configs, issuer);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Single provider mode (backward compatible)
|
|
127
173
|
if (!this.provider) {
|
|
128
174
|
throw new Error(
|
|
129
175
|
`No bot provider instance found!` +
|
|
@@ -228,6 +274,85 @@ export abstract class DyNTS_Bot_Main_ControlService<
|
|
|
228
274
|
}
|
|
229
275
|
}
|
|
230
276
|
|
|
277
|
+
private async setupMultipleProviders(
|
|
278
|
+
configs: DyNTS_Bot_MessageProvider_Config[],
|
|
279
|
+
issuer: string
|
|
280
|
+
): Promise<void> {
|
|
281
|
+
const providers = DyNTS_Bot_Provider_Factory.createProviders(configs);
|
|
282
|
+
this._providers = providers as Map<string, T_PlatformProvider>;
|
|
283
|
+
|
|
284
|
+
const setupPromises = Array.from(providers.entries()).map(([providerId, provider]) => {
|
|
285
|
+
return new Promise<void>((resolve, reject) => {
|
|
286
|
+
provider.onError((error) => {
|
|
287
|
+
if (DyNTS_global_settings.bot_settings?.debugLevel >= 1) {
|
|
288
|
+
DyFM_Error.logSimple(`Bot provider error [${providerId}]:`, error);
|
|
289
|
+
}
|
|
290
|
+
DyNTS_GlobalService.globalErrorHandler(error);
|
|
291
|
+
reject(error);
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
provider.onReady(async () => {
|
|
295
|
+
if (DyNTS_global_settings.bot_settings?.debugLevel >= 1) {
|
|
296
|
+
DyFM_Log.success(`Bot logged in as ${provider.getBotDisplayName()} [${providerId}]`);
|
|
297
|
+
}
|
|
298
|
+
resolve();
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
provider.onMessage((message, messageIssuer, msgProviderId) => {
|
|
302
|
+
try {
|
|
303
|
+
const wrapper: DyNTS_Bot_MessageWrapper<T_PlatformMessage> = {
|
|
304
|
+
message: message as T_PlatformMessage,
|
|
305
|
+
providerId: msgProviderId || provider.getProviderId() || providerId,
|
|
306
|
+
providerType: provider.getProviderName() as any,
|
|
307
|
+
provider: provider as any
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
this.botIO_CS.handleNewMessage(wrapper, messageIssuer)
|
|
311
|
+
} catch (error) {
|
|
312
|
+
DyFM_Error.logSimple('Error handling new message:', error);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
const config = configs.find(c => c.providerId === providerId);
|
|
317
|
+
if (!config) {
|
|
318
|
+
reject(new Error(`No config found for provider ${providerId}`));
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
provider.initialize(config).then(() => {
|
|
323
|
+
const token = this.getTokenForProviderConfig(config);
|
|
324
|
+
return provider.login(token);
|
|
325
|
+
}).catch((error) => {
|
|
326
|
+
reject(error);
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
await Promise.all(setupPromises);
|
|
332
|
+
|
|
333
|
+
// Set default provider (first one) for backward compatibility
|
|
334
|
+
if (this._provider) {
|
|
335
|
+
this._provider = providers.values().next().value;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
await this.start(issuer);
|
|
339
|
+
|
|
340
|
+
DyFM_Log.success('All bot providers setup complete');
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
private getTokenForProviderConfig(config: DyNTS_Bot_MessageProvider_Config): string {
|
|
344
|
+
switch (config.messageProvider) {
|
|
345
|
+
case 'discord':
|
|
346
|
+
return config.discord?.token;
|
|
347
|
+
case 'slack':
|
|
348
|
+
return config.slack?.token;
|
|
349
|
+
case 'teams':
|
|
350
|
+
return config.teams?.appPassword;
|
|
351
|
+
default:
|
|
352
|
+
throw new Error(`Unsupported provider: ${config.messageProvider}`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
231
356
|
async start(issuer: string): Promise<void> {
|
|
232
357
|
try {
|
|
233
358
|
this.botIO_CS = this.getBotIOControlService();
|
|
@@ -1,34 +1,56 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { DyNTS_Bot_MessageProvider, DyNTS_Bot_MessageProvider_Config } from '../_models/bot-message-provider.interface';
|
|
2
|
+
import { DyNTS_Bot_MessageProvider_Type } from '../_enums/bot-message-provider.enum';
|
|
3
|
+
import { DyNTS_DiB_MessageProvider } from '../_modules/discord-bot/_services/dib-message-provider.service';
|
|
4
|
+
import { DyNTS_SlB_MessageProvider } from '../_modules/slack-bot/_services/slb-message-provider.service';
|
|
5
|
+
import { DyNTS_TeB_MessageProvider } from '../_modules/teams-bot/_services/teb-message-provider.service';
|
|
6
|
+
import { DyNTS_DyB_MessageProvider } from '../_modules/dynamo-bot/_services/dyb-message-provider.service';
|
|
7
7
|
|
|
8
8
|
export class DyNTS_Bot_Provider_Factory {
|
|
9
9
|
|
|
10
|
-
static createProvider(config:
|
|
11
|
-
switch (config.
|
|
12
|
-
case
|
|
13
|
-
return new
|
|
10
|
+
static createProvider(config: DyNTS_Bot_MessageProvider_Config): DyNTS_Bot_MessageProvider {
|
|
11
|
+
switch (config.messageProvider) {
|
|
12
|
+
case DyNTS_Bot_MessageProvider_Type.discord:
|
|
13
|
+
return new DyNTS_DiB_MessageProvider();
|
|
14
14
|
|
|
15
|
-
case
|
|
16
|
-
return new
|
|
15
|
+
case DyNTS_Bot_MessageProvider_Type.slack:
|
|
16
|
+
return new DyNTS_SlB_MessageProvider();
|
|
17
17
|
|
|
18
|
-
case
|
|
19
|
-
return new
|
|
18
|
+
case DyNTS_Bot_MessageProvider_Type.teams:
|
|
19
|
+
return new DyNTS_TeB_MessageProvider();
|
|
20
20
|
|
|
21
|
-
case
|
|
22
|
-
return new
|
|
21
|
+
case DyNTS_Bot_MessageProvider_Type.dynamo:
|
|
22
|
+
return new DyNTS_DyB_MessageProvider();
|
|
23
23
|
|
|
24
|
-
case
|
|
25
|
-
if (!config.
|
|
24
|
+
case DyNTS_Bot_MessageProvider_Type.custom:
|
|
25
|
+
if (!config.messageProviderInstance) {
|
|
26
26
|
throw new Error('Custom provider instance is required when provider type is "custom"');
|
|
27
27
|
}
|
|
28
|
-
return config.
|
|
28
|
+
return config.messageProviderInstance;
|
|
29
29
|
|
|
30
30
|
default:
|
|
31
|
-
throw new Error(`Unsupported provider type: ${config.
|
|
31
|
+
throw new Error(`Unsupported provider type: ${config.messageProvider}`);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
+
|
|
35
|
+
static createProviders(configs: DyNTS_Bot_MessageProvider_Config[]): Map<string, DyNTS_Bot_MessageProvider> {
|
|
36
|
+
const providers = new Map<string, DyNTS_Bot_MessageProvider>();
|
|
37
|
+
const providerIds = new Set<string>();
|
|
38
|
+
|
|
39
|
+
for (const config of configs) {
|
|
40
|
+
if (!config.providerId) {
|
|
41
|
+
throw new Error('providerId is required when using multiple providers');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (providerIds.has(config.providerId)) {
|
|
45
|
+
throw new Error(`Duplicate providerId detected: ${config.providerId}`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
providerIds.add(config.providerId);
|
|
49
|
+
|
|
50
|
+
const provider = this.createProvider(config);
|
|
51
|
+
providers.set(config.providerId, provider);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return providers;
|
|
55
|
+
}
|
|
34
56
|
}
|
|
@@ -8,17 +8,17 @@ import { DyNTS_global_settings } from '../../../_collections/global-settings.con
|
|
|
8
8
|
import { DyNTS_Bot_Channel } from '../_models/bot-channel.interface';
|
|
9
9
|
import { DyNTS_Bot_Message } from '../_models/bot-message.interface';
|
|
10
10
|
import { DyNTS_Bot_User } from '../_models/bot-user.interface';
|
|
11
|
-
import {
|
|
11
|
+
import { DyNTS_Bot_MessageProvider } from '../_models/bot-message-provider.interface';
|
|
12
12
|
|
|
13
13
|
export abstract class DyNTS_Bot_Routines_ControlService<
|
|
14
14
|
T_PlatformChannel extends DyNTS_Bot_Channel<any> = DyNTS_Bot_Channel<any>,
|
|
15
15
|
T_PlatformMessage extends DyNTS_Bot_Message<any> = DyNTS_Bot_Message<any>,
|
|
16
16
|
T_PlatformUser extends DyNTS_Bot_User<any> = DyNTS_Bot_User<any>,
|
|
17
|
-
T_PlatformProvider extends
|
|
17
|
+
T_PlatformProvider extends DyNTS_Bot_MessageProvider<
|
|
18
18
|
T_PlatformChannel,
|
|
19
19
|
T_PlatformMessage,
|
|
20
20
|
T_PlatformUser
|
|
21
|
-
> =
|
|
21
|
+
> = DyNTS_Bot_MessageProvider<
|
|
22
22
|
T_PlatformChannel,
|
|
23
23
|
T_PlatformMessage,
|
|
24
24
|
T_PlatformUser
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
// ENUMS
|
|
9
|
-
export * from './_enums/bot-provider.enum';
|
|
9
|
+
export * from './_enums/bot-message-provider.enum';
|
|
10
10
|
|
|
11
11
|
// MODELS
|
|
12
12
|
export * from './_models/bot-message.interface';
|
|
13
|
+
export * from './_models/bot-message-wrapper.interface';
|
|
13
14
|
export * from './_models/bot-channel.interface';
|
|
14
15
|
export * from './_models/bot-user.interface';
|
|
15
|
-
export * from './_models/bot-provider.interface';
|
|
16
|
+
export * from './_models/bot-message-provider.interface';
|
|
16
17
|
export * from './_models/bot-command.interface';
|
|
17
18
|
export * from './_models/bot-global-settings.interface';
|
|
18
19
|
export * from './_models/bot-last-message-date.interface';
|