diff --git a/packages/client-telegram/src/getOrCreateRecommenderInBe.ts b/packages/client-telegram/src/getOrCreateRecommenderInBe.ts new file mode 100644 index 00000000000..f86085cc1fc --- /dev/null +++ b/packages/client-telegram/src/getOrCreateRecommenderInBe.ts @@ -0,0 +1,40 @@ +export async function getOrCreateRecommenderInBe( + recommenderId: string, + username: string, + backendToken: string, + backend: string, + retries = 3, + delayMs = 2000 +) { + for (let attempt = 1; attempt <= retries; attempt++) { + try { + const response = await fetch( + `${backend}/api/updaters/getOrCreateRecommender`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${backendToken}`, + }, + body: JSON.stringify({ + recommenderId: recommenderId, + username: username, + }), + } + ); + const data = await response.json(); + return data; + } catch (error) { + console.error( + `Attempt ${attempt} failed: Error getting or creating recommender in backend`, + error + ); + if (attempt < retries) { + console.log(`Retrying in ${delayMs} ms...`); + await new Promise((resolve) => setTimeout(resolve, delayMs)); + } else { + console.error("All attempts failed."); + } + } + } +} diff --git a/packages/client-telegram/src/telegramClient.ts b/packages/client-telegram/src/telegramClient.ts index 54bd079e2f4..2900a1f648c 100644 --- a/packages/client-telegram/src/telegramClient.ts +++ b/packages/client-telegram/src/telegramClient.ts @@ -1,6 +1,7 @@ import { Context, Telegraf } from "telegraf"; import { IAgentRuntime, elizaLogger } from "@ai16z/eliza"; import { MessageManager } from "./messageManager.ts"; +import { getOrCreateRecommenderInBe } from "./getOrCreateRecommenderInBe.ts"; export class TelegramClient { private bot: Telegraf; @@ -8,6 +9,7 @@ export class TelegramClient { private messageManager: MessageManager; private backend; private backendToken; + private tgTrader; constructor(runtime: IAgentRuntime, botToken: string) { elizaLogger.log("📱 Constructing new TelegramClient..."); @@ -16,6 +18,7 @@ export class TelegramClient { this.messageManager = new MessageManager(this.bot, this.runtime); this.backend = runtime.getSetting("BACKEND_URL"); this.backendToken = runtime.getSetting("BACKEND_TOKEN"); + this.tgTrader = runtime.getSetting("TG_TRADER"); // boolean To Be added to the settings elizaLogger.log("✅ TelegramClient constructor completed"); } @@ -49,24 +52,30 @@ export class TelegramClient { this.bot.on("message", async (ctx) => { try { - const userId = ctx.from?.id.toString(); - const username = - ctx.from?.username || ctx.from?.first_name || "Unknown"; - if (!userId) { - elizaLogger.warn( - "Received message from a user without an ID." - ); - return; - } - try { - await this.getOrCreateRecommenderInBe(userId, username); - } catch (error) { - elizaLogger.error( - "Error getting or creating recommender in backend", - error - ); + if (this.tgTrader) { + const userId = ctx.from?.id.toString(); + const username = + ctx.from?.username || ctx.from?.first_name || "Unknown"; + if (!userId) { + elizaLogger.warn( + "Received message from a user without an ID." + ); + return; + } + try { + await getOrCreateRecommenderInBe( + userId, + username, + this.backendToken, + this.backend + ); + } catch (error) { + elizaLogger.error( + "Error getting or creating recommender in backend", + error + ); + } } - await this.messageManager.handleMessage(ctx); } catch (error) { elizaLogger.error("❌ Error handling message:", error); @@ -123,44 +132,4 @@ export class TelegramClient { await this.bot.stop(); elizaLogger.log("Telegram bot stopped"); } - public async getOrCreateRecommenderInBe( - recommenderId: string, - username: string, - retries = 3, - delayMs = 2000 - ) { - for (let attempt = 1; attempt <= retries; attempt++) { - try { - const response = await fetch( - `${this.backend}/api/updaters/getOrCreateRecommender`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${this.backendToken}`, - }, - body: JSON.stringify({ - recommenderId: recommenderId, - username: username, - }), - } - ); - const data = await response.json(); - return data; - } catch (error) { - console.error( - `Attempt ${attempt} failed: Error getting or creating recommender in backend`, - error - ); - if (attempt < retries) { - console.log(`Retrying in ${delayMs} ms...`); - await new Promise((resolve) => - setTimeout(resolve, delayMs) - ); - } else { - console.error("All attempts failed."); - } - } - } - } }