· 5 years ago · Apr 22, 2020, 02:10 PM
1import vk_api
2from vk_api.longpoll import VkLongPoll, VkEventType
3import time
4import re
5
6BLACK_LIST = { "3649157", "506837858", 3649157, 506837858 }
7COMMS = {'толя, атаку', 'толя, защиту', 'толя, удачу', 'толя, демона', 'толя, орка'} #Список команд
8BUFFS = {'толя, атаку': 'благословение атаки', 'толя, защиту': 'благословение защиты', 'толя, удачу': 'благословение удачи', 'толя, демона': 'благословение демонов', 'толя, орка': 'благословение орков'}
9#Команда:Ответ бота на команду
10
11DEL_COMMS = {'толя, изменить атака', 'толя, изменить защита', 'толя, изменить удача', 'толя, изменить демон', 'толя, изменить орк', 'толя, удалить'} #Команды для удаления/изменения
12DEL_BUFFS = {'толя, изменить атака': 'благословение атаки', 'толя, изменить защита': 'благословение защиты', 'толя, изменить удача': 'благословение удачи', 'толя, изменить демон': 'благословение демонов', 'толя, изменить орк': 'благословение орков'}
13#команда:ответ на команду
14
15
16def send_user(user, msg):
17 vk_session.method('messages.send', {'chat_id': user,'message': msg,'random_id': 0})
18
19def send2(user,rep_id, msg):
20 vk_session.method('messages.send', {'peer_id': user,'forward_messages': rep_id,'message': msg,'random_id': 0})
21
22def getKd(now):
23 return now + 15*60
24
25
26
27
28def getBuff(longpool, chatId, adminChatId,kd = 0,turn = list(),buffs = list(), ids = list()):
29 for event in longpool.listen():
30 if time.time() - kd >= 1 and bool(turn):
31 msg = buffs.pop(0)
32 chatIdInTurn = turn.pop(0)
33 ids.pop(0)
34 send2(2000000000 + chatId, str(chatIdInTurn), msg)
35 kd = getKd(time.time())
36 if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
37 if event.from_chat:
38 if event.chat_id == chatId and event.user_id not in BLACK_LIST:
39 response = event.text.lower()
40 if response in COMMS:
41 if time.time() > kd:
42 if bool(turn) == False:
43 msg = BUFFS.get(response, 'ошибка!')
44 send2(2000000000 + chatId, str(event.message_id), msg)
45 kd = getKd(time.time())
46 else:
47 msg = buffs.pop(0)
48 chatIdInTurn = turn.pop(0)
49 send2(2000000000 + chatId, str(chatIdInTurn), msg)
50 kd = getKd(time.time())
51 else:
52 if event.user_id not in ids:
53 turn.append(event.message_id)
54 buffs.append(BUFFS.get(response, 'ошибка!'))
55 ids.append(event.user_id)
56 chatIdInTurn = event.message_id
57 msg = "Вы " + str(len(turn)) + " в очереди на бафф"
58 send2(2000000000 + chatId, str(chatIdInTurn), msg)
59 else:
60 msg = "Вы уже состоите в очереди на бафф"
61 send2(2000000000 + chatId, event.message_id, msg)
62 if response == 'очередь':
63 msg = "В очереди " + str(len(turn)) + " Человек " + "кд спадет через " + str( int(kd - time.time()) ) + " секунд."
64 send2(2000000000 + chatId, event.message_id, msg)
65 if response == "памагите":
66 msg = 'толя, атаку/защиту/удачу/демона/орка/очередь. толя, изменить атака/защита/удача/демон/орк. толя, удалить'
67 send2(2000000000 + chatId, event.message_id, msg)
68 if response in DEL_COMMS:
69 if event.user_id in ids:
70 if response != 'толя, удалить':
71 index = ids.index(event.user_id)
72 preBuff = buffs[index]
73 buffs[index] = DEL_BUFFS.get(response, 'ошибка!')
74 msg = "Баф '" + preBuff + "' был успешно заменен на '" + buffs[index] + "'"
75 send2(2000000000 + chatId, event.message_id, msg)
76 else:
77 index = ids.index(event.user_id)
78 turn.pop(index)
79 buffs.pop(index)
80 ids.pop(index)
81 msg = "Вы были успешно удалены из учереди. Текущее количество людей в очереди: " + str(len(turn))
82 send2(2000000000 + chatId, event.message_id, msg)
83 else:
84 msg = "Вы не состоите в очереди!"
85 send2(2000000000 + chatId, event.message_id, msg)
86
87 if response == 'баф' and time.time() > kd:
88 msg = buffs.pop(0)
89 chatIdInTurn = turn.pop(0)
90 send2(2000000000 + chatId, str(chatIdInTurn), msg)
91 kd = getKd(time.time())
92
93 if event.type == VkEventType.MESSAGE_NEW: #Все для админов
94 if event.from_chat:
95 if event.chat_id == adminChatId:
96 response = event.text.lower()
97 if response in COMMS: #Баф вне очереди
98 newTurn = list()
99 newBuffs = list()
100 newIds = list()
101 chatIdInTurn = event.message_id
102 user_id = event.user_id
103 buff = BUFFS.get(response, 'ошибка!')
104 newTurn.append(chatIdInTurn)
105 newBuffs.append(buff)
106 newIds.append(ids)
107 turn = newTurn + turn
108 buffs = newBuffs + buffs
109 ids = newIds + ids
110 msg = "Вы " + str(1) + " в очереди на бафф"
111 send2(2000000000 + chatId, str(chatIdInTurn), msg)
112 if 'удалить все' in response:
113 turn = list()
114 ids = list()
115 buffs = list()
116 msg = "Очередь была успешна очищена"
117 send2(2000000000 + AdminchatId, event.message_id, msg)
118 if 'удалить id' in response:
119 del_id = re.findall('(\d+)', response)
120 if not del_id:
121 msg = "Такого пользователя не существует"
122 send2(2000000000 + AdminchatId, event.message_id, msg)
123 elif int(del_id[0]) in ids:
124 print('abc')
125 index = ids.index(int(del_id[0]))
126 buffs.pop(index)
127 ids.pop(index)
128 turn.pop(index)
129 msg = "Пользователь был успешно удален из очереди!"
130 send2(2000000000 + AdminchatId, event.message_id, msg)
131 if 'сбросить кд' in response:
132 kd = 0
133 msg = "[DEBUG] Кд был сброшен!"
134 send2(2000000000 + AdminchatId, event.message_id, msg)
135
136
137def oAuth(token):
138 vk_session = vk_api.VkApi(token=token)
139 return vk_session
140
141
142token = '' #Токен пользователя
143chatId = 76 #беседа гильдии
144AdminchatId = 82 #беседа админов для бафа вне очереди
145vk_session = oAuth(token)
146session_api = vk_session.get_api()
147while True:
148 try:
149 longpoll = VkLongPoll(vk_session)
150 getBuff(longpoll, chatId, AdminchatId)
151 except Exception as e:
152 print(e)