У меня есть бот, и он сильно тормозит. Или это низкая пропускная способность интернета или это мои допущенные костыли в коде или это интернет. Главный файл ниже. Файл запускатор есть, и конфиг тоже
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([[
Keyboard.textButton({
label: 'Оформление VK ' + config.orders['Оформление VK'],
color: 'primary'
})
], [
Keyboard.textButton({
label: 'Оформление YT ' + config.orders['Оформление YT'],
color: 'primary'
})
], [
Keyboard.textButton({
label: 'Оформление TW ' + config.orders['Оформление TW'],
color: 'primary'
})
], [
Keyboard.textButton({
label: 'Пак от BREADY (ОБНОВЛЕН) ' + config.orders['Пак от BREADY (ОБНОВЛЕН)'],
color: 'primary'
})
], [
Keyboard.textButton({
label: 'Граффити ' + config.orders['Граффити'],
color: 'primary'
})
]])
.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
};