|
|
import { BotContext } from '../types/botTypes'; |
|
|
import { createLogger } from '../../utils/logger'; |
|
|
import { messageManager } from '../utils/messageManager'; |
|
|
|
|
|
const logger = createLogger('GroupCheckMiddleware'); |
|
|
|
|
|
export const groupCheckMiddleware = async (ctx: BotContext, next: () => Promise<void>) => { |
|
|
try { |
|
|
|
|
|
if (!ctx.message || !ctx.from) { |
|
|
return next(); |
|
|
} |
|
|
|
|
|
const botData = ctx.botData; |
|
|
if (!botData?.join_group_required || !botData?.group_channel_username) { |
|
|
return next(); |
|
|
} |
|
|
|
|
|
|
|
|
if ('text' in ctx.message && ctx.message.text?.startsWith('/')) { |
|
|
return next(); |
|
|
} |
|
|
|
|
|
try { |
|
|
|
|
|
const chatMember = await ctx.telegram.getChatMember( |
|
|
botData.group_channel_username, |
|
|
ctx.from.id |
|
|
); |
|
|
|
|
|
if (['member', 'administrator', 'creator'].includes(chatMember.status)) { |
|
|
return next(); |
|
|
} |
|
|
|
|
|
|
|
|
const message = messageManager.getMessage('join_group_required'); |
|
|
|
|
|
await ctx.reply(message, { |
|
|
parse_mode: 'HTML', |
|
|
link_preview_options: { is_disabled: true } |
|
|
}); |
|
|
|
|
|
} catch (error: any) { |
|
|
logger.error(`Error checking group membership: ${error.message}`); |
|
|
|
|
|
return next(); |
|
|
} |
|
|
} catch (error: any) { |
|
|
logger.error(`Error in group check middleware: ${error.message}`); |
|
|
return next(); |
|
|
} |
|
|
}; |