telnov_magic
@telnov_magic
Между небом и омутом, между серпом и молотом

Сallback query срабатывает несколько раз?

Здравствуйте. Есть такой код:
async function startEarn(msg, randomChannel) {
    await bot.sendMessage(
        msg.chat.id,
        `Подпишись на канал  "${randomChannel.name}"!`,
        options.inlineKeyboard(randomChannel)
    );

    bot.on('callback_query', (query) => {
        workWithQuery(query, msg, randomChannel)
    });
}

async function workWithQuery(query, msg, randomChannel) {
    switch (query.data) {
        case 'subscribe':
                return;
        case 'doSmth':
            bot.deleteMessage(msg.chat.id, query.message.message_id);
            bot.answerCallbackQuery(query.id);
            return;
        case 'cancel':
            bot.deleteMessage(msg.chat.id, query.message.message_id);
            bot.answerCallbackQuery(query.id);
            earn(msg);
            return;
        case 'back':
            await bot.answerCallbackQuery(query.id, {text: 'Выберите пункт меню: '});
            await bot.sendMessage(msg.chat.id, 'Выберите пункт меню: ');
            return 'to menu';
        default:
            return;
    }
};


Сallback query срабатывает по нескольку раз. А если быть точнее, то она срабатывает столько раз, сколько раз были нажаты кнопки из этой inline_keyboard до этого. Как это можно исправить?
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
Вы должны удалить обработчик из функции startEarn, так как обработчик будет добавляется каждый её вызов
bot.on('callback_query', (query) => {
        workWithQuery(query, msg, randomChannel)
    });

Вам нужно добавить его один раз и уже потом обрабатывать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы