@DannYLook
Программист

Как распределить ответы двух пользователей, которые одновременно проходят опрос?

Здравствуйте! Пишу бота телеграм на node.js, api - 'node-telegram-bot-api'. Бот делает опрос и отправляет результаты ответа администратору, когда голосует одновременно два пользователя, ответ первого присваивается  второму. Искал решение, не как не мог найти. Можете подсказать как решить проблему?
const TelegramApi = require('node-telegram-bot-api')
const AdminChatId = ''


const token = '' //токен telegram

const bot = new TelegramApi(token, {polling: true})

const chats = {}
const startOptions = {
        reply_markup: JSON.stringify({
            inline_keyboard: [
                [{text: 'Пройти опрос', callback_data: '/first'}],
            ]
        }) 
    }

    
    const One = {
        reply_markup: JSON.stringify({
            inline_keyboard: [
                [{text: 'Геленджик', callback_data: '/one1'}],
                [{text: 'Крым', callback_data: '/one2'}],
                [{text: 'Сочи', callback_data: '/one3'}],
            ]
        }) 
    }

    const Two = {
        reply_markup: JSON.stringify({
            inline_keyboard: [
                [{text: 'Галька', callback_data: '/two1'}],
                [{text: 'Песок', callback_data: '/two2'}],
            ]
        }) 
    }

    const Three = {
        reply_markup: JSON.stringify({
            inline_keyboard: [
                [{text: '50.000руб', callback_data: '/three1'}],
                [{text: '100.000руб', callback_data: '/three2'}],
                [{text: '150.000руб', callback_data: '/three3'}],
                [{text: '200.000руб', callback_data: '/three4'}],
            ]
        }) 
    }



const start = async () => {


  bot.setMyCommands ([ // Меню предложенное пользователю
  {command:'/start',  description: 'Начальное приветствие'},
])

bot.on('message', async msg => {
  const text =msg.text;
  const chatId = msg.chat.id;

  try { // Делаем в try что бы ошибка выводилась в консоль
  if(text === "/start") { 
    //await UserModel.create({chatId})
          return bot.sendMessage(chatId, `${msg.from.username}, Добро пожаловать в телеграмм бота! Здесь вы можете пройти опрос!`, startOptions)

      }

return bot.sendMessage(chatId, 'Я тебя не понимаю попробуй еще раз!)') // Сообщение если написана команда которой нет в коде
  } catch (e) { //  Вывод ошибки в консоль
    return bot.sendMessage(chatId, 'Произошла какая, то ошибочка!')
  } 


  
})
let ot1
let ot4
let ot6 
let ot7

bot.on('callback_query', async msg => {
  const data = msg.data; // Получаем цифру
  const chatId = msg.message.chat.id;
if(data === '/first') {
          await  bot.sendMessage(chatId, `Первый вопрос! Куда бы вы хотели съездить этим летом на отдых?`, One);
            }

    

        if(data === '/one1') {
       await  bot.sendMessage(chatId, `Второй вопрос! Какой пляж вам больше нравится?`, Two);
       ot1 = 'Геленджик'
    //  let one1 =  await bot.sendMessage(AdminChatId, `Геленджик`);
        }
        if(data === '/one2') {
            await  bot.sendMessage(chatId, `Второй вопрос! Какой пляж вам больше нравится?`, Two);
            ot1= 'Крым'
            // let one2 =  await bot.sendMessage(AdminChatId, `Крым`);

            }
            if(data === '/one3') {
                await bot.sendMessage(chatId, `Второй вопрос! Какой пляж вам больше нравится?`, Two);
                ot1= 'Сочи'
                // let one3 =  await bot.sendMessage(AdminChatId, `Сочи`);
                }


                if(data === '/two1') {
                    await   bot.sendMessage(chatId, `Третий вопрос! Кокой бюджет у вас на путешествие?`, Three);
                   ot4 = 'Галька'
                    // let two1 =  await bot.sendMessage(AdminChatId, `Галька`);
                    }
                    if(data === '/two2') {
                        await  bot.sendMessage(chatId, `Третий вопрос! Кокой бюджет у вас на путешествие?`, Three);
                        ot4 = 'Песок'
                        // let two2 =  await bot.sendMessage(AdminChatId, `Песок`);
                        }


                        if(data === '/three1') {
                           await  bot.sendMessage(chatId, `Большое спасибо, что проголосовали в нашем опросе!`,);
                           ot6 = '50.000руб'
                           ot7 = `${msg.from.first_name}` + ' Ответил следующее - ' +ot1 +' - '+ ot4 +' - '+ot6
                           await bot.sendMessage(AdminChatId, ot7);
                            }

                        if(data === '/three2') {
                            await  bot.sendMessage(chatId, `Большое спасибо, что проголосовали в нашем опросе!`,);
                            ot6  = '100.000руб'
                            ot7 =  `${msg.from.first_name}` + ' Ответил следующее - ' +ot1 +' - '+ ot4 +' - '+ot6
                           await bot.sendMessage(AdminChatId, ot7);
                            }

                        if(data === '/three3') {
                            await   bot.sendMessage(chatId, `Большое спасибо, что проголосовали в нашем опросе!`,);
                             ot6 = '150.000руб'
                            ot7 = `${msg.from.first_name}` + ' Ответил следующее - ' +ot1 +' - '+ ot4 +' - '+ot6

                            await bot.sendMessage(AdminChatId, ot7);
                            }

                        if(data === '/three4') {
                            await  bot.sendMessage(chatId, `Большое спасибо, что проголосовали в нашем опросе!`,);
                             ot6 = '200.000руб'
                             ot7 = `${msg.from.first_name}` + ' Ответил следующее - ' +ot1 +' - '+ ot4 +' - '+ot6
                             await bot.sendMessage(AdminChatId, ot7);
                            }
                           
  }



)
}


start()
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
@Azperin
Дилетант
а тьфу ты, он же у тебя несколько раз триггерит этот колбек, скоп не поможет, просто будет перезаписывать
Самый простой костыль который в голову пришел
let tempCallbacks = {};

bot.on('callback_query', async msg => {
	if (!tempCallbacks.hasOwnProperty(msg.from.id)) {
		tempCallbacks[msg.from.id] = {
			ot1: '',
			ot4: '',
			ot6: '',
			ot7: '',
		};
	};
	/*
		для ответов юзать tempCallbacks[msg.from.id].ot1 (4 6 7)
		и после отправки фулответов админу просто удаляй их delete tempCallbacks[msg.from.id]
	*/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы