Skip to content

Commit 68d00bc

Browse files
committed
Updated TG group add limitation feature.
1 parent a651e20 commit 68d00bc

File tree

4 files changed

+62
-8
lines changed

4 files changed

+62
-8
lines changed

packages/client-telegram/src/messageManager.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,12 @@ export class MessageManager {
166166
this.bot = bot;
167167
this.runtime = runtime;
168168

169-
this.initializeTeamMemberUsernames().catch(error =>
169+
this._initializeTeamMemberUsernames().catch(error =>
170170
elizaLogger.error("Error initializing team member usernames:", error)
171171
);
172172
}
173173

174-
private async initializeTeamMemberUsernames(): Promise<void> {
174+
private async _initializeTeamMemberUsernames(): Promise<void> {
175175
if (!this.runtime.character.clientConfig?.telegram?.isPartOfTeam) return;
176176

177177
const teamAgentIds = this.runtime.character.clientConfig.telegram.teamAgentIds || [];
@@ -189,7 +189,7 @@ export class MessageManager {
189189
}
190190
}
191191

192-
private getTeamMemberUsername(id: string): string | undefined {
192+
private _getTeamMemberUsername(id: string): string | undefined {
193193
return this.teamMemberUsernames.get(id);
194194
}
195195

@@ -749,7 +749,7 @@ export class MessageManager {
749749
);
750750

751751
const mentionedTeamMember = otherTeamMembers.find(id => {
752-
const username = this.getTeamMemberUsername(id);
752+
const username = this._getTeamMemberUsername(id);
753753
return username && messageText?.includes(`@${username}`);
754754
});
755755

packages/client-telegram/src/telegramClient.ts

+55-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Context, Telegraf } from "telegraf";
2+
import { message } from 'telegraf/filters';
23
import { IAgentRuntime, elizaLogger } from "@ai16z/eliza";
34
import { MessageManager } from "./messageManager.ts";
45
import { getOrCreateRecommenderInBe } from "./getOrCreateRecommenderInBe.ts";
@@ -47,11 +48,56 @@ export class TelegramClient {
4748
this.messageManager.bot = this.bot;
4849
}
4950

51+
private async isGroupAuthorized(ctx: Context): Promise<boolean> {
52+
const config = this.runtime.character.clientConfig?.telegram;
53+
if (ctx.from?.id === ctx.botInfo?.id) {
54+
return false;
55+
}
56+
57+
if (!config?.shouldOnlyJoinInAllowedGroups) {
58+
return true;
59+
}
60+
61+
const allowedGroups = config.allowedGroupIds || [];
62+
const currentGroupId = ctx.chat.id.toString();
63+
64+
if (!allowedGroups.includes(currentGroupId)) {
65+
elizaLogger.info(`Unauthorized group detected: ${currentGroupId}`);
66+
try {
67+
await ctx.reply("Not authorized. Leaving.");
68+
await ctx.leaveChat();
69+
} catch (error) {
70+
elizaLogger.error(`Error leaving unauthorized group ${currentGroupId}:`, error);
71+
}
72+
return false;
73+
}
74+
75+
return true;
76+
}
77+
5078
private setupMessageHandlers(): void {
5179
elizaLogger.log("Setting up message handler...");
5280

81+
this.bot.on(message('new_chat_members'), async (ctx) => {
82+
try {
83+
const newMembers = ctx.message.new_chat_members;
84+
const isBotAdded = newMembers.some(member => member.id === ctx.botInfo.id);
85+
86+
if (isBotAdded && !(await this.isGroupAuthorized(ctx))) {
87+
return;
88+
}
89+
} catch (error) {
90+
elizaLogger.error("Error handling new chat members:", error);
91+
}
92+
});
93+
5394
this.bot.on("message", async (ctx) => {
5495
try {
96+
// Check group authorization first
97+
if (!(await this.isGroupAuthorized(ctx))) {
98+
return;
99+
}
100+
55101
if (this.tgTrader) {
56102
const userId = ctx.from?.id.toString();
57103
const username =
@@ -76,12 +122,18 @@ export class TelegramClient {
76122
);
77123
}
78124
}
125+
79126
await this.messageManager.handleMessage(ctx);
80127
} catch (error) {
81128
elizaLogger.error("❌ Error handling message:", error);
82-
await ctx.reply(
83-
"An error occurred while processing your message."
84-
);
129+
// Don't try to reply if we've left the group or been kicked
130+
if (error?.response?.error_code !== 403) {
131+
try {
132+
await ctx.reply("An error occurred while processing your message.");
133+
} catch (replyError) {
134+
elizaLogger.error("Failed to send error message:", replyError);
135+
}
136+
}
85137
}
86138
});
87139

packages/core/src/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,8 @@ export type Character = {
724724
shouldIgnoreBotMessages?: boolean;
725725
shouldIgnoreDirectMessages?: boolean;
726726
shouldRespondOnlyToMentions?: boolean;
727+
shouldOnlyJoinInAllowedGroups?: boolean;
728+
allowedGroupIds?: string[];
727729
messageSimilarityThreshold?: number;
728730
isPartOfTeam?: boolean;
729731
teamAgentIds?: string[];

pnpm-lock.yaml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)