Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.04.2022, 00:54
Интересующийся
Отправить личное сообщение для _RedGamer_ Посмотреть профиль Найти все сообщения от _RedGamer_
 
Регистрация: 25.04.2022
Сообщений: 13

Cannot access "users" before initialization
let {
    VK,
    Keyboard
} = require('vk-io')
let vk = new VK({
    token: `токен`
})
let commands = []
vk.updates.start().then(() => console.log(`Запущено!`))
vk.updates.on('message_event', async (message) => {
    const [user_info] = await vk.api.users.get({
        user_ids: message.userId
    })
    console.log(`Беседа #${message.peerId}, id сообщения ${message.conversationMessageId}`)
    const users = users.find(x => x.id === (message.userId))
    if (!users) {
        console.log(`Пользователь не найден :(`);
        return
    }
    if (message.eventPayload.text === 'Ты успешно проверил(а) Callback кнопку') return;
    vk.api.messages.sendMessageEventAnswer({
        event_id: message.eventId,
        peer_id: message.peerId,
        conversation_message_ids: message.conversationMessageId,
        user_id: message.userId,
        event_data: JSON.stringify({
            "type": "show_snackbar",
            "text": `${user_info.first_name}, Ты успешно проверил(а) Callback кнопку`
        })
    })
    return
})
vk.updates.on('message', async (message) => {
    if (message.isOutbox) return;
    if (!message.text) return;
    const command = commands.find(x => x[0].test(message.text));
    console.log(`${message.senderId}, ${message.text}`)
    if (!command) return message.send(`нет такой команды`)
    message.args = message.text.match(command[0]);
    await command[1](message);
})
const cmd = {
    one: (p, f) => {
        commands.push([p, f]);
    }
}
cmd.one(/^(привет)$/i, async (message) => {
    return message.send(`ку`, {
        keyboard: Keyboard.keyboard([])
            .textButton({
                label: 'Нажми на меня',
                color: Keyboard.PRIMARY_COLOR
            })
            .textButton({
                label: 'Нажми на меня2',
                color: Keyboard.POSITIVE_COLOR
            })
            .row()
            .urlButton({
                label: 'Нажми на меня3',
                url: 'https://vk.com/*',
                color: Keyboard.NEGATIVE_COLOR
            })
    })

})
cmd.one(/^(тест)\s(.*)$/i, async (message) => {
    return message.send(`я думаю это ${message.args[2]}`)
})
cmd.one(/^(кнопка)$/i, async (message) => {
    return message.send('Нажми на кнопку ниже..', {
        keyboard: JSON.stringify({
            buttons: [
                [{
                    action: {
                        type: "callback",
                        label: "Проверка Callback",
                        payload: {
                            type: "show_snackbar",
                            text: "Ты успешно проверил(а) Callback кнопку"
                        }
                    },
                    color: "primary"
                }]
            ],
            inline: true
        })
    })
})

Последний раз редактировалось _RedGamer_, 25.04.2022 в 15:10.
Ответить с цитированием
  #2 (permalink)  
Старый 25.04.2022, 01:03
Интересующийся
Отправить личное сообщение для _RedGamer_ Посмотреть профиль Найти все сообщения от _RedGamer_
 
Регистрация: 25.04.2022
Сообщений: 13

Есть ещё теория, что с user_info.first_name какие-то траблы будут,но пока что не знаю..

Буду рад, если подскажите что сделать нужно чтобы было всё ОК

Последний раз редактировалось _RedGamer_, 25.04.2022 в 02:11.
Ответить с цитированием
  #3 (permalink)  
Старый 25.04.2022, 13:57
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #4 (permalink)  
Старый 25.04.2022, 14:48
Интересующийся
Отправить личное сообщение для _RedGamer_ Посмотреть профиль Найти все сообщения от _RedGamer_
 
Регистрация: 25.04.2022
Сообщений: 13

Nexus,
Проверьте пожалуйста..
Ответить с цитированием
  #5 (permalink)  
Старый 25.04.2022, 15:00
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

_RedGamer_, а весь код пропустить через beautifier и поместить в блок «JS» не получилось?

Ошибка в строке 19: вы при инициализации переменной «users» используете её же.
Во-первых: строка полностью некорректна.
Во-вторых: непонятно зачем вообще нужно запрашивать информацию о пользователе, если она в дальнейшем никак не будет использоваться. Чтобы проверить, что такой пользователь существует? Если такого пользователя нет, то от него сообщение не сможет поступить.

Если бы вы изначально написали номер строки, в которой у вас происходит ошибка, то не пришлось бы вникать в ваш код, чтобы найти ошибку.

let {
    VK,
    Keyboard
} = require('vk-io')

let vk = new VK({
    token: `токен`
})

let commands = []

vk.updates.start().then(() => console.log(`Запущено!`))

vk.updates.on('message_event', async (message) => {
    const [user_info] = await vk.api.users.get({
        user_ids: message.userId
    })
    console.log(`Беседа #${message.peerId}, id сообщения ${message.conversationMessageId}`)
*!*
    const users = users.find(x => x.id === (message.userId))
*/!*
    if (!users) {
        console.log(`Пользователь не найден :(`);
        return
    }
    if (message.eventPayload.text === 'Ты успешно проверил(а) Callback кнопку') return;
    vk.api.messages.sendMessageEventAnswer({
        event_id: message.eventId,
        peer_id: message.peerId,
        conversation_message_ids: message.conversationMessageId,
        user_id: message.userId,
        event_data: JSON.stringify({
            "type": "show_snackbar",
            "text": `${user_info.first_name}, Ты успешно проверил(а) Callback кнопку`
        })
    })
    return
})

vk.updates.on('message', async (message) => {
    if (message.isOutbox) return;
    if (!message.text) return;
    const command = commands.find(x => x[0].test(message.text));
    console.log(`${message.senderId}, ${message.text}`)
    if (!command) return message.send(`нет такой команды`)
    message.args = message.text.match(command[0]);
    await command[1](message);
})

const cmd = {
    one: (p, f) => {
        commands.push([p, f]);
    }
}

cmd.one(/^(привет)$/i, async (message) => {
    return message.send(`ку`, {
        keyboard: Keyboard.keyboard([])
            .textButton({
                label: 'Нажми на меня',
                color: Keyboard.PRIMARY_COLOR
            })
            .textButton({
                label: 'Нажми на меня2',
                color: Keyboard.POSITIVE_COLOR
            })
            .row()
            .urlButton({
                label: 'Нажми на меня3',
                url: 'https://vk.com/*',
                color: Keyboard.NEGATIVE_COLOR
            })
    })

})

cmd.one(/^(тест)\s(.*)$/i, async (message) => {
    return message.send(`я думаю это ${message.args[2]}`)
})

cmd.one(/^(кнопка)$/i, async (message) => {
    return message.send('Нажми на кнопку ниже..', {
        keyboard: JSON.stringify({
            buttons: [
                [{
                    action: {
                        type: "callback",
                        label: "Проверка Callback",
                        payload: {
                            type: "show_snackbar",
                            text: "Ты успешно проверил(а) Callback кнопку"
                        }
                    },
                    color: "primary"
                }]
            ],
            inline: true
        })
    })
})

Последний раз редактировалось Nexus, 25.04.2022 в 15:19.
Ответить с цитированием
  #6 (permalink)  
Старый 25.04.2022, 15:08
Интересующийся
Отправить личное сообщение для _RedGamer_ Посмотреть профиль Найти все сообщения от _RedGamer_
 
Регистрация: 25.04.2022
Сообщений: 13

Извините,не знал про beautifier.io
Так..подскажите? В чём дело?
Ответить с цитированием
  #7 (permalink)  
Старый 25.04.2022, 15:20
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

_RedGamer_, внес изменения в комментарий №5
Ответить с цитированием
  #8 (permalink)  
Старый 25.04.2022, 15:25
Интересующийся
Отправить личное сообщение для _RedGamer_ Посмотреть профиль Найти все сообщения от _RedGamer_
 
Регистрация: 25.04.2022
Сообщений: 13

Я пробовал вместо users.find использовать users.filter и const user = users.filter и т.д пробовал бестолку..вот я и хочу узнать от хорошо понимающего,в чём здесь ошибка и как её решить)

Последний раз редактировалось _RedGamer_, 25.04.2022 в 15:28.
Ответить с цитированием
  #9 (permalink)  
Старый 25.04.2022, 15:30
Интересующийся
Отправить личное сообщение для _RedGamer_ Посмотреть профиль Найти все сообщения от _RedGamer_
 
Регистрация: 25.04.2022
Сообщений: 13

Nexus,
Я хочу чтобы Callback кнопка выдала мне всплывающее окно,а эти ошибки мешают,а даже не грузит..
Ответить с цитированием
  #10 (permalink)  
Старый 25.04.2022, 15:33
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от _RedGamer_
Я пробовал вместо users.find использовать users.filter и const user = users.filter и т.д пробовал бестолку
А у вас переменная users вообще существует до попытки её инициализации в строке 19? В коде её нет.
И нужно ли вообще запрашивать информацию о пользователе?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск