bot-me / src /bots /middleware /groupCheckMiddleware.ts
Mohammed Foud
all
52048a9
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 {
// 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();
}
};