@@ -7,6 +7,13 @@ import { MuteService } from "./command/mute";
77import { BanService } from "./command/ban" ;
88import { SafeExecution } from "../decorators/SafeExecution" ;
99import { ApprovedUser } from "../entities/ApprovedUser" ;
10+ import { GroupSettingsService } from "./db/group" ;
11+ import { Logger } from "../config/logger" ;
12+ import { BlacklistService } from "./command/blacklist" ;
13+ import { UserService } from "./db/user" ;
14+ import { GroupMembershipService } from "./db/group/Membership" ;
15+ import { MESSAGE } from "../helper/message" ;
16+ const logger = new Logger ( { file : "join_group.log" , level : "info" } ) ;
1017
1118export class MessageCheck {
1219 @SafeExecution ( )
@@ -31,10 +38,14 @@ export class MessageCheck {
3138 return ;
3239 }
3340 const blacklist = groupSettings . black_list ;
34- const approvedUserRepo : Repository < ApprovedUser > = AppDataSource . getRepository ( ApprovedUser ) ;
35- const [ isApprovedUser , isAdmin ] = await Promise . all ( [ approvedUserRepo . findOne ( {
36- where : { user_id : userId , group : { group_id : groupId } } ,
37- } ) , this . isAdmin ( ctx , userId ) ] )
41+ const approvedUserRepo : Repository < ApprovedUser > =
42+ AppDataSource . getRepository ( ApprovedUser ) ;
43+ const [ isApprovedUser , isAdmin ] = await Promise . all ( [
44+ approvedUserRepo . findOne ( {
45+ where : { user_id : userId , group : { group_id : groupId } } ,
46+ } ) ,
47+ this . isAdmin ( ctx , userId ) ,
48+ ] ) ;
3849 if ( isApprovedUser || isAdmin ) {
3950 return ;
4051 }
@@ -79,7 +90,10 @@ export class MessageCheck {
7990 username : string ,
8091 messageId : number
8192 ) {
82- const [ muteService , banService ] = [ new MuteService ( ctx , userId ) , new BanService ( ctx , userId ) ]
93+ const [ muteService , banService ] = [
94+ new MuteService ( ctx , userId ) ,
95+ new BanService ( ctx , userId ) ,
96+ ] ;
8397
8498 const [ command , duration ] = action . split ( " " ) ;
8599 switch ( command . toLowerCase ( ) ) {
@@ -127,4 +141,69 @@ export class MessageCheck {
127141
128142 return now ;
129143 }
144+ static async initialGroup ( ctx : Context ) {
145+ const chat = ctx . chat ! ;
146+ const from = ctx . from ;
147+ try {
148+ const groupRepo = new GroupSettingsService ( ) ;
149+ let groupSettings = await groupRepo . getByGroupId ( chat . id ) ;
150+ if ( groupSettings ) {
151+ return ;
152+ }
153+
154+ if ( ! groupSettings ) {
155+ groupSettings = await groupRepo . init ( ctx ) ;
156+ logger . info (
157+ `Bot added to group ${ chat . title } by ${ from ?. username } ` ,
158+ "GROUP"
159+ ) ;
160+ // Initialize blacklist terms from BlackListJson
161+ await BlacklistService . storeBlacklistTerms ( groupSettings ) ;
162+ } else {
163+ logger . info (
164+ `Bot re-added to existing group ${ chat . title } by ${ from ?. username } ` ,
165+ "GROUP"
166+ ) ;
167+ }
168+
169+ // Add the user who added the bot to the group as an admin
170+ const userRepo = new UserService ( ) ;
171+ let user = await userRepo . getByTelegramId ( from ?. id ! ) ;
172+
173+ if ( ! user ) {
174+ user = await userRepo . create ( {
175+ telegram_id : from ?. id ! ,
176+ role : "admin" ,
177+ } ) ;
178+
179+ await userRepo . save ( user ) ;
180+ } else {
181+ // Update user role if needed
182+ if ( user . role !== "admin" ) {
183+ user . role = "admin" ;
184+ await userRepo . save ( user ) ;
185+ }
186+ }
187+
188+ // Create a GroupMembership record
189+ const membershipRepo = new GroupMembershipService ( ) ;
190+ let membership = await membershipRepo . getGroupAndUserId (
191+ groupSettings . id ,
192+ user . id
193+ ) ;
194+
195+ if ( ! membership ) {
196+ membership = await membershipRepo . create ( {
197+ group : groupSettings ,
198+ user : user ,
199+ is_admin : true ,
200+ } ) ;
201+
202+ await membershipRepo . save ( membership ) ;
203+ }
204+ await ctx . reply ( MESSAGE . newGroupJoin ( ctx , from ?. username ! ) ) ;
205+ } catch ( error : any ) {
206+ logger . error ( "Failed to save group settings" , error , "GROUP" ) ;
207+ }
208+ }
130209}
0 commit comments