Answer the question
In order to leave comments, you need to log in
The VK bot slows down. What to do?
I have a bot and it is very slow. Or is it the low bandwidth of the Internet or is it my allowed crutches in the code or is it the Internet. The main file is below. There is a launcher file, and a config too
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 timeout = new Set();
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) {
let command = await message.text.split(' ')
let spokesWatch = await spokes.findOne({userID: command[1]})
if (command[0] == '/screen') {
if (command[2] == 'true') {
paids.insertOne({
userID: Number(command[1]),
order: JSON.stringify(spokesWatch),
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. Удачных покупок!'
})
spokes.updateOne({userID: command[1]}, {$set: {screen: false}})
message.send('Команда отправлена!')
}
}
if (command[0] == '/form') {
await vk.api.messages.send({
random_id: dateUTC,
peer_id: command[1],
message: config.formSuccesfully
})
message.send('Форма пользователя успешно принята!')
}
} else {
let paidsWatch = await paids.findOne({userID: message.senderId})
if (paidsWatch != null) {
let command = await message.text.split(' ')
if (command[0] == '/form' && Object.keys(config.formStart).indexOf(command[1]) >= 0) {
message.send("Команда отправлена, ожидайте проверки администрации...")
let userData = await spokes.findOne({userID: message.senderId})
await vk.api.messages.send({
random_id: dateUTC,
peer_id: config.admins,
message: '[BOT] Пожалуйста, проверьте форму пользователя ' + message.senderId + '\n\nФорма: ' + message.text + '\n' + JSON.stringify(userData) + '\n\nИспользуйте команду /form <Пользователь> <true/false>'
})
} else {
message.send("Укажите после команды 1 или 1. или 1)\nВ вашем чате установлен таймаут в 10 секунд во избежания спама")
timeout.add(message.senderId)
function deleteTimer() {
timeout.delete(message.senderId)
message.send('Вы можете отправить форму снова!')
}
setTimeout(deleteTimer, 10000);
}
};
if (await spokes.findOne({userID: message.senderId, screen: 'wait...'}) != null) return;
if (await spokes.findOne({userID: message.senderId, screen: 'verified...'}) != null) return;
let spokesWatch = await spokes.findOne({userID: message.senderId})
let choiceWatch = await spokes.findOne({userID: message.senderId, screen: 'choice...'})
let choice2Watch = await spokes.findOne({userID: message.senderId, screen: 'choice2...'})
if (spokesWatch == null) {
spokes.insertOne({
userID: message.senderId,
screen: 'false',
spoke: message.text,
time: date
})
}
if (Object.keys(config.startcmd).indexOf(message.text.toLowerCase()) >= 0 && timeout.has(message.senderId) == false && choiceWatch == null && choice2Watch == null) {
spokes.updateOne({userID: message.senderId, screen: 'false'}, { $set: {screen: 'choice...', time: date}})
let keyboard = Keyboard
.keyboard()
.inline();
message.send({ message: 'Привет! В нашей группе ты можешь заказать много всего интересного...\nОзнакомься со спектром услуг и выбери нужную.\nПосле оплаты вы получите форму для заполнения.\nДизайн рисуется 1-3 дня\nУдачного пользования!', keyboard: keyboard, random_id: getRandomId() })
return;
} //startMessage
if (Object.keys(config.orders).indexOf(message.text) >= 0 && timeout.has(message.senderId) == false) {
message.send({
message: 'Вам необходимо оплатить товар.\n\nСтоимость - ' + config.orders_price[message.text] + '\nОплата картой: 0000 0000 0000 0000\n\nПосле операции вы должны предоставить чек об оплате.',
keyboard: Keyboard.builder()
.urlButton({
label: 'Мне долго не отвечают, позвать модерацию',
url: 'https://vk.com/mr.sakura52'
})
.inline()
});
message.send({
message: 'Оплата через DonationAlerts',
keyboard: Keyboard.builder()
.urlButton({
label: 'Оплатить через DonationAlerts',
url: 'https://youtube.com'
})
});
message.send(config.screen)
if (choiceWatch != null) {
spokes.updateOne({userID: message.senderId}, { $set: {spoke: message.text, screen: 'choice2...', time: date}})
} else {
spokes.updateOne({userID: message.senderId}, { $set: {spoke: message.text, screen: 'choice2...', time: date}})
message.send('Во избежания спама в вашем чате установлен 10ти секундовый таймаут во время которого бот не будет работать')
timeout.add(message.senderId)
function deleteTimer() {
timeout.delete(message.senderId)
message.send('Вы можете выбрать товар опять!')
}
setTimeout(deleteTimer, 15000);
}
return;
}
const screen = await message.text.split(' ')
if (screen[0] == '/screen') {
if (spokesWatch != null) {
spokes.updateOne({userID: message.senderId}, { $set: {screen: 'verified...'}})
message.send("Команда отправлена, ожидайте проверки администрации...");
let userData = await spokes.findOne({userID: message.senderId})
await vk.api.messages.send({
random_id: dateUTC,
peer_id: config.admins,
message: '[BOT] Пожалуйста, проверьте наличие оплаты у пользователя ' + message.senderId + '\n\nСпособ оплаты: ' + screen[1] + '\n\n' + JSON.stringify(userData) + '\n\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
};
Answer the question
In order to leave comments, you need to log in
If it is limited by the number of API requests, you should increase apiLimit , try other
apiMode and apiRequestMode . Next you should profile your code to understand the bottleneck.
Well, you will figure out the load on the network per percent on the disk on the memory
Look at the system utilities for what the load is
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question