· 4 years ago · Aug 28, 2021, 08:00 PM
1const { VK, Keyboard } = require('vk-io');
2const vk = new VK();
3
4const {updates, api} = vk;
5const fs = require('fs');
6const moment = require('moment');
7const sleep = require('system-sleep');
8
9const users = require('./db/users.json');
10
11const { Database } = require("./SQLite.js");
12const db = new Database("./db/database.db");
13
14(async () => {
15 db.openConnection();
16})();
17db.execute("CREATE TABLE if not exists chats (id INT, title TEXT, qlt INT DEFAULT 0, lng INT DEFAULT 0, UNIQUE(id))");
18db.execute("CREATE TABLE if not exists users (id INT, name TEXT, family TEXT, chatId INT, qlt INT DEFAULT 0, lng INT DEFAULT 0, isOld INT DEFAULT 0)");
19
20vk.setOptions({
21 token: '',
22 apiMode: 'parallel_selected',
23 pollingGroupId: 183768267
24});
25
26var items;
27
28updates.use(async (context, next) => {
29 if (!context.chatId || context.is("message") && context.isOutbox) return;
30 if (context.senderType !== "user") return;
31
32 let chatsUpdatesTimers = {};
33 if (chatsUpdatesTimers[context.chatId] && chatsUpdatesTimers[context.chatId] > context.createdAt)
34 delete chatsUpdatesTimers[context.chatId];
35 else {
36 items = await api.messages.getConversationsById({ peer_ids: 2000000000 + context.chatId });
37 chatsUpdatesTimers[context.chatId] = context.createdAt+300;
38 }
39 [user] = await api.users.get({ user_ids: context.senderId });
40
41 if(context.eventType == 'chat_title_update')
42 {
43 db.execute(`UPDATE chats SET title = "${items.items[0].chat_settings.title}"`);
44 }
45
46 if(await db.get(`SELECT id FROM chats WHERE id = "${context.chatId}"`) == undefined) {
47 db.execute(`INSERT OR IGNORE INTO chats (id, title) VALUES ("${context.chatId}", "${items.items[0].chat_settings.title}")`);
48 }
49 db.execute(`UPDATE chats SET qlt = qlt + 1, lng = lng + "${String(context.text).length}"`);
50
51 if(await db.get(`SELECT id FROM users WHERE id = "${context.senderId}" AND chatId = "${context.chatId}"`) == undefined) {
52 db.execute(`INSERT INTO users (id, name, family, chatId) VALUES ("${context.senderId}", "${user.first_name}", "${user.last_name}", "${context.chatId}")`);
53 }
54 if (context.text != null) {
55 if (String(context.text).length < 150 && String(context.text).length > 1) {
56 db.execute(`UPDATE users SET qlt = qlt + 1, lng = lng + "${String(context.text).length}"`);
57 }
58 }
59
60 try {
61 await next();
62 } catch(err) {
63 throw err;
64 }
65});
66
67var xuy = {};
68updates.hear('/топ', async (context) => {
69 context.send("test");
70 let _users = [];
71
72 let { items } = await api.messages.getConversationMembers({ peer_id: context.peerId });
73
74 var uses = await db.getAll("SELECT * FROM users");
75 for (let key in uses) {
76 _users.push({
77 id: uses[key].id,
78 name: uses[key].name,
79 family: uses[key].family,
80 chatId: uses[key].chatId,
81 msg: {
82 qlt: uses[key].qlt,
83 lng: uses[key].lng
84 }
85 });
86 }
87
88 return context.send(
89 "Рейтинг сообщений беседы (символы | сообщения):\n" +
90 _users
91 .filter(elem => elem.msg.qlt && elem.msg.lng !== "0")
92 .filter(elem => String(elem.id) == suka(String(elem.id)))
93 .filter(elem => String(elem.chatId) === String(context.chatId))
94 .sort((a, b) => b.msg.lng- a.msg.lng) //.sort((a,b) => (b.msg.lng + b.msg.qlt) - (a.msg.lng + a.msg.qlt))
95 .slice(0, 100)
96 .map((x, i) => `${++i}. ${x.name} ${x.family} — ${x.msg.lng} | ${x.msg.qlt}\n`)
97 );
98
99 function suka(value) {
100 for (i = 0; i < items.length; i++) {
101 if(value == items [i].member_id) {
102 var inv = (items [i].member_id);
103 return inv;
104 break;
105 }
106 }
107 }
108});