Загрузка...

Verification | Telegram | Telegraph

Thread in JS/TS created by vtx Nov 12, 2025. 261 view

  1. vtx
    vtx Topic starter Nov 12, 2025 Banned 1 Jun 13, 2025
    Привет :colobok_hi:
    Надеюсь поможете мне. Я хочу сделать верификация для чата, вход - капча - кнопка - прошел

    В моем тестовом чате, где всего я мама и папа - все работает
    Но если я меняю ID на основной чат, где должно работать по задумке (~2000 подписчиков) - там не работает. Я не понимаю почему и с чем связано это :frog_why:


    JS
      bot.on("new_chat_members", async (ctx, next) => {
    const chatId = parseInt(process.env.ANTI_SPAM_CHAT_ID, 10);
    if (ctx.chat.id !== chatId || !BOT_USERNAME) return next();

    const newMembers = ctx.message.new_chat_members;
    for (const member of newMembers) {
    if (member.is_bot) continue;

    const userId = member.id;
    const firstName = member.first_name || "Пользователь";

    try {
    await ctx.telegram.restrictChatMember(chatId, userId, {
    can_send_messages: false,
    can_send_media_messages: false,
    can_send_polls: false,
    can_send_other_messages: false,
    can_add_web_page_previews: false,
    can_change_info: false,
    can_invite_users: false,
    can_pin_messages: false,
    });

    const startUrl = `https://t.me/${BOT_USERNAME}?start=${userId}`;
    const msg = await ctx.reply(
    `${firstName}, нажмите кнопку ниже в течение 15 секунд, чтобы иметь возможность писать в группе`,
    {
    parse_mode: "HTML",
    ...Markup.inlineKeyboard([[Markup.button.url(" Я человек", startUrl)]]),
    }
    );

    pendingVerificationMessages.set(userId, { chatId, messageId: msg.message_id });

    setTimeout(async () => {
    try {
    const memberInfo = await ctx.telegram.getChatMember(chatId, userId);
    if (memberInfo.can_send_messages === false) {
    await ctx.telegram.deleteMessage(chatId, msg.message_id).catch(() => {});
    await ctx.telegram.kickChatMember(chatId, userId).catch(() => {});
    await ctx.telegram.unbanChatMember(chatId, userId).catch(() => {});
    pendingVerificationMessages.delete(userId);
    log("success", `Пользователь ${userId} не прошёл верификацию и был кикнут.`);
    }
    } catch (err) {
    log("error", "Ошибка таймаута верификации:", err);
    }
    }, JOIN_TIMEOUT);

    } catch (err) {
    log("error", "Ошибка при верификации нового пользователя:", err);
    }
    }

    return next();
    });
     
  2. Kartoshka2331
    что именно не работает? что в консоль пишет? ты выдал боту права?
     
    1. vtx Topic starter
      avatarKartoshka2331 , все работает в тестовом чате, а в основном чате, где и задумывалось - нет. Отличие чатов только в количестве участников - не более. Права у бота те же, чат также закрытый. Стоит мне поменять ID на main чат, так он не слушает просто) Молчит, консоль пуста, ошибок 0
    2. vtx Topic starter
    3. vtx Topic starter
  3. vtx
    vtx Topic starter Nov 14, 2025 Banned 1 Jun 13, 2025
    К сожалению, никто не оказал помощи. Если кто-то столкнется с аналогичной проблемой, я нашел следующее решение: "allowedUpdates".
    JS
    (async () => {
    try {
    await bot.telegram.deleteWebhook({ drop_pending_updates: true });
    await bot.launch({
    allowedUpdates: ["message", "chat_member", "my_chat_member", "edited_message", "callback_query"],

    });
    } catch (err) {
    log("error", ` Ошибка при запуске бота: ${err.message}`);
    process.exit(1);
    }

    })();
    Полный код функции: https://pastebin.com/mMcwmmnk
     
Loading...