· 6 years ago · Mar 25, 2020, 02:16 PM
1#! /usr/bin/env python
2# -*- coding: utf-8 -*-
3import vk_api
4from vk_api.bot_longpoll import VkBotLongPoll
5from vk_api.utils import get_random_id
6from datetime import datetime, timezone
7import time
8import random
9import requests, json
10vk = vk_api.VkApi(token='3709764b230f73dbf6a6fca9c41e726af8c0e28eff5ea171f2e25d6b5d3761711e9cf46b77cbf3d7c47ba') #токен паблика
11
12class MyVkLongPoll(VkBotLongPoll): # создаю класс чтобы он не терял соединение с сервером вк когда тот перезагружается (перезагружается раз в день где-то глубоко ночью)
13 def listen(self):
14 while True:
15 try:
16 for event in self.check():
17 yield event
18 except Exception as e:
19 print(e) #будет писать в консоль что таймаут произошел, при желании просто впишите сюда pass
20
21bot_id = '193179464' # сюда id паблика
22longpoll = MyVkLongPoll(vk, bot_id)
23
24def send_message(msg):
25 vk.method('messages.send',{'random_id':get_random_id(),'peer_id':event.obj.peer_id,'message':msg})
26
27
28
29
30
31citymoscow = ['moscow', 'мск', 'время москва']
32
33sityekb = ['ект', 'екб', 'екатеринбург', 'ekaterinburg', 'время екб']
34
35for event in longpoll.listen(): #начинаем слушать лонгпулл
36 if event.obj:
37 if event.obj.text.lower() == 'команды':
38 send_message('Я не имею команд')
39 print(event.obj.text)
40 elif event.obj.text.lower() == 'привет':
41 send_message('привет')
42 print(event.obj.text)
43 elif event.obj.text.lower() == 'пока':
44 send_message('пока')
45 print(event.obj.text)
46
47
48
49
50
51
52 elif 'погода' in event.obj.text.lower():
53
54 # Enter your API key here
55 api_key = "c012abf83e8afdf40810863f64ae8618"
56
57 # base_url variable to store url
58 base_url = "http://api.openweathermap.org/data/2.5/weather?"
59 # Give city name
60
61
62 city_name = event.obj.text.split(' ')[1:][0] #Получаем всё, что идёт после "погода"
63
64
65 complete_url = base_url + "appid=" + api_key + "&q=" + city_name
66
67 response = requests.get(complete_url)
68
69 x = response.json()
70
71 if x["cod"] != "404":
72
73 y = x["main"]
74
75
76
77 current_temperature = y["temp"]
78
79
80 current_pressure = y["pressure"]
81
82
83 current_humidiy = y["humidity"]
84
85
86 z = x["weather"]
87
88
89 weather_description = z[0]["description"]
90
91 # print following values
92 send_message(" Temperature (in kelvin unit) = " +
93 str(current_temperature) +
94 "\n atmospheric pressure (in hPa unit) = " +
95 str(current_pressure) +
96 "\n humidity (in percentage) = " +
97 str(current_humidiy) +
98 "\n description = " +
99 str(weather_description))
100
101
102
103 elif 'рандом' in event.obj.text.lower():
104 spis = event.obj.text.split(' ')[1:] #Получаем всё, что идёт после "рандом"
105 if len(spis)>1:
106 send_message('Неправильно набрана команда!')
107 continue
108 else:
109 try:
110 first_number = int(spis[0].split('-')[0]) #Получаем первое число деля строку с числами на две
111 second_number = int(spis[0].split('-')[1]) #Получаем второе число
112 random_num = random.randint(first_number, second_number)
113 send_message(str('Рандомное число: ' + str(random_num)))
114 except:
115 send_message('неправильные числа представлены!')
116
117
118 elif event.obj.text.lower() == 'время':
119 send_message('В моей базе данных есть только: \n1. екатеринбург UTC+05\n2. москва UTC+03')
120 print(event.obj.text)
121
122
123
124 elif event.obj.text.lower() in citymoscow:
125 morning = [6,7,8,9]
126 day = [10,11,12,13,14,15,16,17,18,19,20,21,22]
127 night = [23,24,0,1,2,3,4,5]
128 time = datetime.now(timezone.utc)
129 utc = time.hour + 3
130 if utc in morning:
131 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s morning, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
132 elif utc in day:
133 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s day, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
134 elif utc in night:
135 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s night, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
136 send_message(st)
137 print(event.obj.text)
138
139 elif event.obj.text.lower() in sityekb:
140 morning = [6,7,8,9]
141 day = [10,11,12,13,14,15,16,17,18,19,20,21,22]
142 night = [23,24,0,1,2,3,4,5]
143 time = datetime.now(timezone.utc)
144 utc = time.hour + 5
145 if utc in morning:
146 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s morning, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
147 elif utc in day:
148 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s day, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
149 elif utc in night:
150 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s night, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
151 send_message(st)
152 print(event.obj.text)
153
154
155
156 elif event.obj.text.lower() == 'кик':
157 try:
158 chat_id = int(str(event.obj.peer_id)[-1:])
159 user_id = event.obj['reply_message']['from_id']
160 vk.method("messages.removeChatUser", {"chat_id": chat_id ,"user_id": user_id })
161 except Exception as e:
162 print(e)
163
164
165# vk.method('сам метод',{параметры метода})