M
M
mrsakura522021-11-07 22:25:38
MongoDB
mrsakura52, 2021-11-07 22:25:38

Split doesn't work. NodeJS. What to do?

So. I have a bot that uses vk-io and mongodb. In the process of writing the code, I apparently made a mistake: at first the bot began to double the messages. That is, he repeated 1 block of code 2 times. Example:

console.log('яблоко')
console.log('апельсин')
// яблоко
// яблоко
// апельсин
// апельсин


After the bot stopped responding to messages at all...

core.js:
const {VK, getRandomId, Keyboard} = require('vk-io')
const config = require('../config/config.json')
const {MongoClient} = require('mongodb')

console.log(config.prefix + 'Модуль VK запущен')

const vk = new VK ({
    token: config.token,
    apiVersion: '5.131'
})
const client = new MongoClient(config.db)
const spokes = client.db().collection('spokes')
const paids = client.db().collection('paids')
const completed = client.db().collection('completed')
let date = new Date()
let dateUTC = date.getUTCDate() * date.getUTCFullYear() * date.getUTCHours() * date.getUTCMonth() * date.getUTCSeconds() * date.getUTCMilliseconds()

vk.updates.on('message', async function(message) {
    if (message.text == null || message.isGroup == true || message.text == 'undefined' || message.isOutbox) return;
    if (message.senderId == config.admins) {
        var command = message.text.split(' ')
        if (command[0] == '/screen') {
            if (command[3] == 'true') {
                paids.insertOne({
                    userID: command[1],
                    order: command [2],
                    time: date

                })
                spokes.deleteOne({userID: command[1]})
                vk.api.messages.send({
                    random_id: dateUTC,
                    peer_id: command[1],
                    message: config.form
                })
                message.send('Команда отправлена!')
            } else {
                vk.api.messages.send({
                    random_id: dateUTC,
                    peer_id: command[1],
                    message: 'Вы не прошли проверку. Если это не так обратитесь к @mr.sakura52. Удачных покупок!'
                })
                message.send('Команда отправлена!')
            }
        }
    } else {
        let spokesWatch = spokes.findOne({userID: message.senderId})
        let paidsWatch = paids.findOne({userID: message.senderId})
        let completedWatch = await completed.findOne({userID: message.senderId})
        let spokesVerified = await spokes.findOne({userID: message.senderId, screen: 'verified...'})
        if (Object.keys(config.startcmds).indexOf(message.text.toLowerCase()) >= 0 && spokesVerified == null) {
            
            let keyboard = Keyboard
            
            .keyboard()
            .inline();
            
            message.send({ message: 'Привет! В нашей группе ты можешь заказать много всего интересного...\nОзнакомься со спектром услуг и выбери нужную.\nПосле оплаты вы получите форму для заполнения.\nДизайн рисуется 1-3 дня\nУдачного пользования!', keyboard: keyboard, random_id: getRandomId() })
        
            return true;
        } //startMessage

        if (Object.keys(config.orders).indexOf(message.text) >= 0 && spokesVerified == null && paidsWatch == null) {
            message.send({
                message: 'Вам необходимо оплатить товар.\n\nСтоимость - ' + config.orders_price[message.text] + '\nОплата картой: 0000 0000 0000 0000\n\nПосле операции вы должны предоставить чек об оплате.',
                keyboard: Keyboard.builder()
                    .urlButton({
                        label: 'Мне долго не отвечают, позвать модерацию',
                        url: 'замазан'
                    })
                    .inline()
            });
            message.send({
                message: 'Оплата через DonationAlerts',
                keyboard: Keyboard.builder()
                    .urlButton({
                        label: 'Оплатить через DonationAlerts',
                        url: 'замазан'
                    })
            });
            message.send(config.screen)
            if (spokesWatch == null) {
                spokes.insertOne({
                    userID: message.senderId,
                    screen: 'false',
                    spoke: message.text,
                    time: date
                })
            } else {
                if (paidsWatch == null && spokesVerified == null) {
                    spokes.updateOne({userID: message.senderId}, { $set: {spoke: message.text}})
                }
            }
        }

        var screen = message.text.split(' ')
        if (screen[0] == '/screen' && paidsWatch == null) {
            if (spokesWatch != null) { 
                spokes.updateOne({userID: message.senderId}, { $set: {screen: 'verified...'}})
                message.send("Команда отправлена, ожидайте проверки администрации...")
                const spokeUserPromise = async() => spokes.findOne({userID: message.senderId})
                const spokeUser = await spokeUserPromise()
                vk.api.messages.send({
                    random_id: dateUTC,
                    peer_id: config.admins,
                    message: '[BOT] Пожалуйста, проверьте наличие оплаты у пользователя ' + message.senderId + '\n\nСпособ оплаты: ' + screen[1] + '\n' + spokeUser + '\nИспользуйте команду /screen <Пользователь> <true/false>'
                })
            }
        }
    }
}) /* vk updates message */

async function dbinitialize() {
    try {
        await client.connect()
        console.log(config.prefix + 'Соединение установлено')
    } catch (e) {
        console.log(e)
    }
};

async function vkinitialize() {
    await vk.updates.startPolling();
};

module.exports = {
    vk: vk,
    dbinitialize: dbinitialize,
    vkinitialize: vkinitialize
};


app.js:

const core = require('./lib/core.js')
const config = require('C:/Users/User/Desktop/MongoDBBot/config/config.json')

async function main() {
    await core.dbinitialize()
    console.log(config.prefix + 'База данных успешно запущена')
    await core.vkinitialize()
    console.log(config.prefix + 'Отслеживание началось')
}
main()


config.json:

{
    "prefix": "[BOT] ",
    "token": "токен",  //специально замазан
    "db": "ссылка на подключение", //специально замазана
    "admins": 000000000, //специально замазан
    "form": "Вы успешно оплатили работу, спасибо за заказ! Для понятия вы должны заполнить анкету:\n\n 1. Основные цвета\n2. Второстепенные цвета (малозаметные)\n3. Текст который будет изображен\n4. Желаемые эффекты (опишите)\n5. Что по вашему должна передавать эта работа, какое настроение и какие чувства?\n\nПросьба писать все четко и по плану, спасибо за понимание!",
    "screen": "После оплаты вы должны прикрепить скрин об оплате и добавить к нему команду /screen <Способ оплаты>. В противном случае ваш платеж не проверится и услуга не будет оказана.",
    "startcmds": ["начать", "заказать", "взять", "купить", "преобрести", "нарисовать"],
    "startcmd": {"начать": "",
        "заказать": "", 
        "взять": "", 
        "купить": "", 
        "преобрести": "", 
        "нарисовать": ""},
    "orders": {"Оформление VK": "",
        "Пак от BREADY (ОБНОВЛЕН)": "",
        "Оформление YT": "",
        "Оформление TW": "",
        "Граффити": ""},
    "orders_price": {"Оформление VK": "10P",
        "Пак (ОБНОВЛЕН)": "10P",
        "Оформление YT": "10P",
        "Оформление TW": "10P",
        "Граффити": "10P"},
    "confirm": "Вы прошли проверку. Заполните анкету, пожалуйста"
}


Before this there was a similar problem. By the way, under the correct condition, if was not executed. I entered the updates.on block, but did not execute if. And there was a TypeError: message.split is not a function
What's wrong?

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question