Всем привет. Такая ситуация, поставил бота, работает все хорошо. Но есть функция проверки подписки на канал. Когда вызываешь ее, крашится весь бот и потом нужно перезапускать его на сервере. Как я понял проблема в том, что ctx.chat.id не работает в следующем коде(я проверял его даже обычное reply не выводит). Помогите кто-нибудь разобраться в чём дело. const checkMember = async (chatId, memberId) => { const info = await bot.telegram.getChatMember(chatId, memberId); if(info.status == "left") return false; return true; } bot.action("podpiska", async (ctx) => { const checked = await checkMember(channelid, ctx.chat.id) if(!checked) return ctx.editMessageText("❌ТЫ НЕ ПОДПИСАЛСЯ НА КАНАЛ❌"); ctx.replyWithHTML('<b>Добро пожаловать ' + ctx.from.first_name + '</b>!\n\n<i>Доступ к базе данных открыт\n\nНажмите на кнопку </i><b> Найти фильм</b>', Markup.keyboard([ [' Найти фильм'] ]).resize() ) })
Если это каллбек кнопка, то там вроде ид получается по другому. Чекни структуру ctx и найди там id юзера
BusDriver, слушай а для этой функции await bot.telegram.getChatMemberCount(chatId); какая библиотека нужна ?
ctx.chat.id работает абсолютно всегда в любом методе, Скинь лог из консольки, и если ты хочешь проверять человека конкретного, лучше используй ctx.from.id bot.use(subMiddleware); async function subMiddleware(ctx, $next){ let user = await ctx.telegram.getChatMember(process.env.CHECK_CHAT, ctx.from.id); if(user.status == 'left'){ if(typeof ctx.callback_query != 'undefined') ctx.answerCbQuery('Вы не подписались на мой самый крутой в мире канал', {show_alert: true}) return ctx.replyWithHTML('Для начала подпишитесь на мой самый лучший паблик :)') } return $next(); } JavaScript bot.use(subMiddleware); async function subMiddleware(ctx, $next){ let user = await ctx.telegram.getChatMember(process.env.CHECK_CHAT, ctx.from.id); if(user.status == 'left'){ if(typeof ctx.callback_query != 'undefined') ctx.answerCbQuery('Вы не подписались на мой самый крутой в мире канал', {show_alert: true}) return ctx.replyWithHTML('Для начала подпишитесь на мой самый лучший паблик :)') } return $next(); } Выше код, он должен работать если я где-то не опечатался По рекомендации советую добавить фильтрацию на методы, ибо если ты используешь инвойсы и прочую херню в боте, то если чел не подписан на паблик то его платеж не пройдет + Оберни код в try catch, ибо если бот каким-то образом не будет в твоем паблике, то он вообще всех и вся будет нахуй слать (А если ты не используешь свою обработку ошибок или pm2 то он впринципе спать уйдет на неопределнный срок)