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) => { try { // Skip check for non-message updates if (!ctx.message || !ctx.from) { return next(); } const botData = ctx.botData; if (!botData?.join_group_required || !botData?.group_channel_username) { return next(); } // Skip check for admin commands if ('text' in ctx.message && ctx.message.text?.startsWith('/')) { return next(); } try { // Check if user is a member of the required group const chatMember = await ctx.telegram.getChatMember( botData.group_channel_username, ctx.from.id ); if (['member', 'administrator', 'creator'].includes(chatMember.status)) { return next(); } // User is not a member of the required group 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}`); // If there's an error checking membership, allow the user to proceed return next(); } } catch (error: any) { logger.error(`Error in group check middleware: ${error.message}`); return next(); } };