· 5 years ago · Aug 30, 2020, 08:40 PM
1#!/usr/bin/python3.8
2# This Python file uses the following encoding: utf-8
3# -*- coding: utf-8 -*-
4
5## <===== IMPORT =====>
6import vk_api
7from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
8from vk_api.keyboard import VkKeyboard, VkKeyboardColor
9
10import sqlite3
11import re
12
13## <===== DATA =====>
14#<-- PERSONAL
15admin_id = 304081097
16vk_bot_token = '357..f29'
17vk_bot_id = 18..71
18#<-- VK_API
19vk_api_version = 5.95
20vk_session = vk_api.VkApi(token = vk_bot_token, api_version = vk_api_version)
21vk = vk_session.get_api()
22longpoll = VkBotLongPoll(vk_session, vk_bot_id)
23#<-- SQLite DB
24my_db = 'words.db'
25db = sqlite3.connect(my_db)
26sql = db.cursor()
27#<-- Warning list
28war_list = ["hey", "there"]
29
30# Create db
31sql.execute("""CREATE TABLE IF NOT EXISTS words (
32 id INT,
33 word INT,
34 violations INT,
35 every25 INT
36 )""")
37db.commit() #commit
38
39## <===== DEF =====>
40#<-- Counter
41def every25():
42 for i in sql.execute(f"SELECT every25 FROM words WHERE id = {event.object.from_id}"):
43 every25 = i[0]
44 return every25
45
46#<-- Words
47def words():
48 sql.execute(f"SELECT id FROM words WHERE id = '{event.object.from_id}'")
49 if sql.fetchone() is None:
50 sql.execute("INSERT INTO words VALUES (?, ?, ?, ?)", (event.object.from_id, 1, 0, 25))
51 db.commit()
52 for i in sql.execute(f"SELECT word FROM words WHERE id = {event.object.from_id}"):
53 word = i[0]
54 return word
55
56def reg_words():
57 sql.execute(f"SELECT id FROM words WHERE id = '{event.object.from_id}'")
58 if sql.fetchone() is None:
59 sql.execute("INSERT INTO words VALUES (?, ?, ?, ?)", (event.object.from_id, 1, 0, 25))
60 db.commit()
61 else:
62 sql.execute(f"UPDATE words SET word = {words() + 1} WHERE id = {event.object.from_id}")
63 db.commit()
64
65#<-- Violations
66def violations():
67 sql.execute(f"SELECT id FROM words WHERE id = '{event.object.from_id}'")
68 if sql.fetchone() is None:
69 sql.execute("INSERT INTO words VALUES (?, ?, ?, ?)", (event.object.from_id, 1, 1, 25))
70 db.commit()
71 for i in sql.execute(f"SELECT violations FROM words WHERE id = {event.object.from_id}"):
72 violations = i[0]
73 return violations
74
75def reg_violations():
76 sql.execute(f"SELECT id FROM words WHERE id = '{event.object.from_id}'")
77 if sql.fetchone() is None:
78 sql.execute("INSERT INTO words VALUES (?, ?, ?, ?)", (event.object.from_id, 1, 1, 25))
79 db.commit()
80 else:
81 sql.execute(f"UPDATE words SET violations = {violations() + 1} WHERE id = {event.object.from_id}")
82 db.commit()
83 if violations() == every50():
84 vk.messages.send(peer_id = event.object.peer_id, message = f"Вы имеете {every25} нарушений", random_id = 0)
85
86## <===== MAIN =====>
87def main():
88 print("Bot has been launched")
89 try:
90 for event in longpoll.listen():
91 if event.type == VkBotEventType.MESSAGE_NEW:
92 if event.object.peer_id != event.object.from_id:
93 reg_words()
94 for x in warrning:
95 if re.search(fr'\b{x}\b', f'{event.object.text.lower()}'):
96 reg_violations()
97
98 if event.object.text.lower() == "/стат":
99 vk.messages.send(peer_id = event.object.peer_id, message = f"Количество @id{event.object.from_id}(ваших) нарушений: {violations()}, всего слов: {words()}", random_id = 0)
100
101 elif "/стат [" in event.object.text.lower():
102 users_get = event.object.text.lower().replace("/стат [", "").replace("]", "").replace("@", "").split("|")
103
104 id_users_get = vk.users.get(user_ids = users_get[1])[0]["id"]
105 sql.execute(f"SELECT id FROM words WHERE id = '{id_users_get}'")
106 if sql.fetchone() is None:
107 vk.messages.send(peer_id = event.object.peer_id, message = "Данный пользователь не зарегистрирован в базе", random_id = 0)
108 else:
109 first_name_users_get = vk.users.get(user_ids = users_get[1])[0]["first_name"]
110 last_name_users_get = vk.users.get(user_ids = users_get[1])[0]["last_name"]
111 for y in sql.execute(f"SELECT violations FROM words WHERE id = {id_users_get}"):
112 violations = y[0]
113 for i in sql.execute(f"SELECT word FROM words WHERE id = {id_users_get}"):
114 word = i[0]
115 vk.messages.send(peer_id = event.object.peer_id, message = f"Пользователь [id{id_users_get}|{first_name_users_get} {last_name_users_get}] имеет данное кол-во слов: {word}, нарушений:{violations}" , random_id = 0)
116
117 if event.object.peer_id == event.object.from_id:
118 if event.object.text.lower() == "/стат":
119 vk.messages.send(peer_id = event.object.peer_id, message = f"Количество @id{event.object.from_id}(ваших) нарушений: {violations()}, слов: {words()}", random_id = 0)
120 elif "/стат [" in event.object.text.lower():
121 users_get = event.object.text.lower().replace("/стат [", "").replace("]", "").replace("@", "").split("|")
122
123 id_users_get = vk.users.get(user_ids = users_get[1])[0]["id"]
124 sql.execute(f"SELECT id FROM words WHERE id = '{id_users_get}'")
125 if sql.fetchone() is None:
126 vk.messages.send(peer_id = event.object.peer_id, message = "Данный пользователь не зарегистрирован в базе", random_id = 0)
127 else:
128 first_name_users_get = vk.users.get(user_ids = users_get[1])[0]["first_name"]
129 last_name_users_get = vk.users.get(user_ids = users_get[1])[0]["last_name"]
130 for y in sql.execute(f"SELECT violations FROM words WHERE id = {id_users_get}"):
131 violations = y[0]
132 for i in sql.execute(f"SELECT word FROM words WHERE id = {id_users_get}"):
133 word = i[0]
134 vk.messages.send(peer_id = event.object.peer_id, message = f"Пользователь [id{id_users_get}|{first_name_users_get} {last_name_users_get}] имеет данное кол-во слов: {word}, нарушений:{violations}" , random_id = 0)
135 else:
136 keyboard = VkKeyboard(one_time = False)
137 keyboard.add_button("/стат", color=VkKeyboardColor.POSITIVE)
138 vk.messages.send(peer_id = event.object.peer_id, message = "Неизвестная команда, используй клавиатуру Вконтакте.", keyboard = keyboard.get_keyboard(), random_id = 0)
139 except Exception as e:
140 print(str(e))
141 main()
142main()
143