Итак. У меня есть бот который использует vk-io и mongodb. В процессе написания кода я видимо допустил ошибку: сначала бот стал удваивать сообщения. То есть он повторял 1 блок кода 2 раза. Пример:
console.log('яблоко')
console.log('апельсин')
// яблоко
// яблоко
// апельсин
// апельсин
После бот перестал откликаться на сообщения вообще...
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([[
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: 'Пак ' + config.orders['Пак'],
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 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": "Вы прошли проверку. Заполните анкету, пожалуйста"
}
До этого была похожая проблема. Кстати при верном условии if не выполнялось. В блок updates.on заходил, if не выполнял. И была ошибка TypeError: message.split is not a function
Что не так?