Spaces:
Paused
Paused
| 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(); | |
| } | |
| }; |