· 6 years ago · Feb 13, 2020, 01:06 PM
1// Модули
2const { VK } = require('vk-io');
3const vk = new VK();
4const fs = require('fs');
5const colors = require('colors');
6const VKCOINAPI = require('node-vkcoinapi');
7const vkcoin = new VKCOINAPI({
8 token: тут мой токен полученный с клевера", //токен страницы с которой получен key от клевер
9 key: "ключ вк коин API", //ключ мернчата вк коин
10 userId: 444199994}); //ID страницы с которой получен ключ
11var Qiwi = require('node-qiwi-api').Qiwi;
12var NumberQiwi = тут мой номер; //Номер киви
13var Wallet = new Qiwi('тут мой токен киви'); // ключ api киви (все галочки)
14// database
15const users = require('./cmds/users.json');
16let info = require('./cmds/info.json');
17let checks = require('./cmds/checks.json');
18
19setInterval(async () => {
20 require('fs').writeFileSync('./cmds/users.json', JSON.stringify(users, null, '\t'));
21 require('fs').writeFileSync('./cmds/info.json', JSON.stringify(info, null, '\t'));
22 require('fs').writeFileSync('./cmds/checks.json', JSON.stringify(checks, null, '\t'));
23}, 10000);
24
25// Объявляем объект с командами
26const cmds = fs
27 .readdirSync(`${__dirname}/cmds/`)
28 .filter((name) => /\.js$/i.test(name))
29 .map((name) => require(`${__dirname}/cmds/${name}`));
30
31 const utils = {
32 sp: (int) => {
33 int = int.toString();
34 return int.split('').reverse().join('').match(/[0-9]{1,3}/g).join('.').split('').reverse().join('');
35 },
36 probel: (int) => {
37 int = int.toString();
38 return int.split('').reverse().join('').match(/[0-9]{1,3}/g).join(' ').split('').reverse().join('');
39 },
40 rn: (int, fixed) => {
41 if (int === null) return null;
42 if (int === 0) return '0';
43 fixed = (!fixed || fixed < 0) ? 0 : fixed;
44 let b = (int).toPrecision(2).split('e'),
45 k = b.length === 1 ? 0 : Math.floor(Math.min(b[1].slice(1), 14) / 3),
46 c = k < 1 ? int.toFixed(0 + fixed) : (int / Math.pow(10, k * 3) ).toFixed(1 + fixed),
47 d = c < 0 ? c : Math.abs(c),
48 e = d + ['', 'тыс', 'млн', 'млрд', 'трлн'][k];
49
50 e = e.replace(/e/g, '');
51 e = e.replace(/\+/g, '');
52 e = e.replace(/Infinity/g, 'Бессконечно');
53
54 return e;
55 },
56 gi: (int) => {
57 int = int.toString();
58
59 let text = ``;
60 for (let i = 0; i < int.length; i++)
61 {
62 text += `${int[i]}⃣`;
63 }
64
65 return text;
66 },
67 decl: (n, titles) => { return titles[(n % 10 === 1 && n % 100 !== 11) ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2] },
68 random: (x, y) => {
69 return y ? Math.round(Math.random() * (y - x)) + x : Math.round(Math.random() * x);
70 },
71 pick: (array) => {
72 return array[utils.random(array.length - 1)];
73 }
74}
75
76// Определяем токен
77 vk.setOptions({
78 'token': 'тут мой токен с клевер'
79 });
80
81// Консолим успешный запуск
82console.log(`Бот успешно запущен`.yellow.bold);
83
84// Запускаем Полинг (Polling)
85vk.updates.startPolling();
86
87vkcoin.updates.startPolling();
88
89// Запускаем обработчик новых и изменённых сообщений
90vk.updates.on(['new_message', 'edit_message'], async(msg) => {
91 if(Number(msg.senderId) <= 0) return;
92
93 if(!users.find(x=> x.userID === msg.senderId))
94 {
95 const [user_info] = await vk.api.users.get({ user_id: msg.senderId });
96
97 users.push({
98 id: users.length,
99 userID: msg.senderId,
100 number: null,
101 vkcoin: 0,
102 txn: null,
103 rub: 0
104 });
105 }
106
107 // Если сообщение от группы или исходящее, то возвращаем
108 if (msg.senderId < 1 || msg.isOutbox) {
109 return;
110 }
111
112 // Консолим сообщения
113 console.log(`${msg.senderId} => ${msg.text}`.red.bold);
114
115 // Объявление важных переменных:
116 let infor = info.find(x=> x.enable === true);
117 msg.user = users.find(x=> x.userID === msg.senderId); // Переменная содержащая в себе информацию о пользователе из базы
118 msg.fwds = msg.forwards || []; // Просто упрощение..
119
120 // Определяем команду по regexp или tag. Если команды нет, то пишем об этом
121 let cmd = cmds.find(cmd => cmd.regexp ? cmd.regexp.test(msg.text) : (new RegExp(`^\\s*(${cmd.tag.join('|')})`, "i")).test(msg.text));
122 if (!cmd) return msg.send('📕 | Команда не найдена. Напишите "Меню" или "Начать"');
123
124
125
126 // Функции "отправлялки" сообщений
127 msg.answer = (text = "", params = {}) => {
128 const result = msg.isChat ? `${config.rightIcons[msg.user.rights]} ${msg.user.nick},\n${text}` : `${text}`;
129 return msg.send(result, params);
130 };
131 msg.ok = (text = "", params = {}) => {
132 return msg.answer('📗 | ' + text, params);
133 };
134 msg.error = (text = "", params = {}) => {
135 return msg.answer('📕 | ' + text, params);
136 };
137
138 // Выполнение функции через try { ... } catch() { ... }
139 try {
140 await cmd.func(msg, { cmds, vk, VK, cmd, users, infor, vkcoin, utils, checks, Wallet, Qiwi, NumberQiwi });
141 }
142 catch (e) {
143 console.log(`Ошибка:\n${e}`.red.bold);
144 msg.error(`Ошибка при выполнении команды '${msg.text}'`);
145 }
146});
147
148// Консолим ошибки
149process.on("uncaughtException", e => {
150 console.log(e);
151});
152
153process.on("unhandledRejection", e => {
154 console.log(e);
155});