-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbot.js
121 lines (99 loc) · 3.32 KB
/
bot.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const fs = require('fs');
const readline = require('readline');
const vk = require('./api/vk');
const acl = require('./api/acl')
const Bot = require('./classes/Bot');
const commands = require('./commands/_export');
const config = require('./config');
const bot = new Bot(config.name, config['public-id']);
// Регистрация команд
commands.forEach(item => {
if (!item.callback) {
item.forEach(_item => { // для нескольких комнад в модуле
bot.addCommand(_item)
})
} else {
bot.addCommand(item)
}
})
// Главный обработчик
bot.addHandler('message_new', async (data, res) => {
res.send('ok')
data.text = data.text.toLowerCase()
let arr = data.text.split(' ');
arr.forEach( (item) => {
item = item.replace('[.,?]', '');
});
let cmd = '';
let args = '';
let force = false; // позволяет "проскочить" проверку на обращение к боту
if (bot.fastres[data.peer_id]) {
cmd = arr.shift();
args = arr;
if (cmd.search(bot.callname) !== -1 || cmd == bot.link) {
cmd = args.shift();
} else {
bot.setFastres(data.peer_id, false)
}
if (!cmd && !args) {
return
}
force = true;
}
if (!force) {
// поиск обращения к боту
if (arr[0].search(bot.callname) === -1 && arr[0] != bot.link) {
return false
}
if (arr.length > 1) {
arr.splice(0, 1);
cmd = arr.shift();
args = arr;
}
}
if (cmd == '') cmd = 'fastreshook' // очередной костыль для regex
// перебор массива с командами
for (let item of bot.buffer) {
for (let keyword of item.keywords) {
if (cmd.search(keyword) !== -1 && item.callback) {
if (item.access) { // проверка прав (acl)
let can = await acl.hasUserPermissionTo(data.from_id, item.access)
if (!can)
return
}
// console.log("NSFW of cmd: "+ item.nsfw)
// console.log("NSFW of chat: "+ await acl.hasGroupNsfwTo(data.peer_id))
if (item.nsfw) { // проверка цензуры (acl)
let can = await acl.hasGroupNsfwTo(data.peer_id)
if (!can || can == false || data.peer_id != data.from_id)
return
}
item.callback(data, args, cmd, bot)
return
}
}
}
})
// Второстепенный обработчик
bot.addHandler('message_new', (data) => {
console.log('ID: '+ data.from_id + " wrote: "+ data.text)
})
// Обработчик подтверждения
bot.addHandler('confirmation', (_, res) => {
res.send(config.confirmation)
})
// Управление из консоли
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.on('line', (input) => {
let arr = input.split(' ')
let cmd = arr[0]
let peer_id = arr[1]
arr.splice(0, 2)
if (cmd == 'say') {
vk.message.send(peer_id, arr.join(' '))
}
})
module.exports = bot