· 6 years ago · Mar 26, 2020, 04:30 AM
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 pyowm
10import requests, json # Модуль для обработки URL
11from bs4 import BeautifulSoup # Модуль для работы с HTML
12import smtplib # Модуль для работы с почтой
13
14vk = vk_api.VkApi(token='3709764b230f73dbf6a6fca9c41e726af8c0e28eff5ea171f2e25d6b5d3761711e9cf46b77cbf3d7c47ba') #токен паблика
15
16class MyVkLongPoll(VkBotLongPoll): # создаю класс чтобы он не терял соединение с сервером вк когда тот перезагружается (перезагружается раз в день где-то глубоко ночью)
17 def listen(self):
18 while True:
19 try:
20 for event in self.check():
21 yield event
22 except Exception as e:
23 print(e) #будет писать в консоль что таймаут произошел, при желании просто впишите сюда pass
24
25bot_id = '193179464' # сюда id паблика
26longpoll = MyVkLongPoll(vk, bot_id)
27
28def send_message(msg):
29 vk.method('messages.send',{'random_id':get_random_id(),'peer_id':event.obj.peer_id,'message':msg})
30
31
32
33
34
35citymoscow = ['moscow','время мск' ,'мск', 'время москва'] #Время Москва UTC + 3
36
37sityekb = ['ект', 'екб', 'время екатеринбург', 'ekaterinburg', 'время екб'] #Время екб UTC +5
38course = ['курсы','курс', 'курсы валют', 'Валюта']
39dollar = ['курс доллара', 'доллар', 'usd']
40euro = ['евро', 'euro', 'курс евро', 'курсы валют', 'Валюта']
41for event in longpoll.listen(): #начинаем слушать лонгпулл
42 if event.obj:
43 if event.obj.text.lower() == 'команды':
44 send_message('Я не имею команд')
45 print(event.obj.text)
46 elif event.obj.text.lower() == 'привет':
47 send_message('привет')
48 print(event.obj.text)
49 elif event.obj.text.lower() == 'пока':
50 send_message('пока')
51 print(event.obj.text)
52
53 #elif event.obj.text.lower() == 'kick':
54 #chat_id = int(str(event.obj.peer_id)[-1:])
55 #vk.method('messages.removeChatUser',{'chat_id':chat_id,'member_id':504708567})
56
57
58
59 elif event.obj.text.lower() in course:
60
61 dollar_rub = 'https://www.google.com/search?q=ljkkfh+r+he%2Ck.&oq=ljkkfh+r+he%2Ck.&aqs=chrome..69i57j0l7.2159j1j7&sourceid=chrome&ie=UTF-8'
62 euro_rub = 'https://www.google.com/search?q=%D0%B5%D0%B2%D1%80%D0%BE&oq=%D0%B5%D0%B2%D1%80%D0%BE&aqs=chrome..69i57j35i39j0l5j46.1503j1j7&sourceid=chrome&ie=UTF-8'
63 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
64 # Парсим всю страницу
65 full_page = requests.get(dollar_rub, headers=headers)
66 full_page2 = requests.get(euro_rub, headers=headers)
67 # Разбираем через BeautifulSoup
68 soup = BeautifulSoup(full_page.content, 'html.parser')
69 soup2 = BeautifulSoup(full_page2.content, 'html.parser')
70 # Получаем нужное для нас значение и возвращаем его
71 convert1 = soup.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2})
72 convert2 = soup2.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2})
73 send_message('Доллар = ' + str(convert1[0].text) + ' рублей' '\nЕвро = ' + str(convert2[0].text) + ' рублей' )
74
75 elif event.obj.text.lower() in dollar:
76
77 dollar_rub = 'https://www.google.com/search?q=ljkkfh+r+he%2Ck.&oq=ljkkfh+r+he%2Ck.&aqs=chrome..69i57j0l7.2159j1j7&sourceid=chrome&ie=UTF-8'
78 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
79 full_page = requests.get(dollar_rub, headers=headers)
80 soup = BeautifulSoup(full_page.content, 'html.parser')
81 convert1 = soup.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2})
82 send_message('Доллар = ' + str(convert1[0].text) + ' рублей' )
83
84 elif event.obj.text.lower() in euro:
85
86 euro_rub = 'https://www.google.com/search?q=%D0%B5%D0%B2%D1%80%D0%BE&oq=%D0%B5%D0%B2%D1%80%D0%BE&aqs=chrome..69i57j35i39j0l5j46.1503j1j7&sourceid=chrome&ie=UTF-8'
87 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
88 full_page2 = requests.get(euro_rub, headers=headers)
89 soup2 = BeautifulSoup(full_page2.content, 'html.parser')
90 convert2 = soup2.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2})
91 send_message('Евро = ' + str(convert2[0].text) + 'рублей' )
92
93
94
95
96
97
98 elif 'погода' in event.obj.text.lower():
99
100 # Enter your API key here
101 #api_key = "c012abf83e8afdf40810863f64ae8618"
102
103 # base_url variable to store url
104 #base_url = "http://api.openweathermap.org/data/2.5/weather?"
105 # Give city name
106 owm = pyowm.OWM('c012abf83e8afdf40810863f64ae8618', language = 'ru')
107
108 try:
109 city_name = event.obj.text.split(' ')[1:][0] #Получаем всё, что идёт после "погода"
110
111 #pyowm
112 observation = owm.weather_at_place(city_name)
113 w = observation.get_weather()
114 temp = w.get_temperature('celsius')['temp']
115 status = w.get_detailed_status()
116
117
118 #pyowm
119
120
121 # print following values
122 send_message(" Temperature (in celsius) = " +
123 str(temp) + '°' +
124 #"\n atmospheric pressure (in hPa unit) = " +
125 #str(current_pressure) +
126 #"\n humidity (in percentage) = " +
127 #str(current_humidiy) +
128 "\n description = " +
129 str(status))
130 except:
131 send_message('Город не найден')
132
133
134 elif '/rand' in event.obj.text.lower():
135 spis = event.obj.text.split(' ')[1:] #Получаем всё, что идёт после "рандом"
136 if len(spis)>1:
137 send_message('Неправильно набрана команда!')
138 continue
139 else:
140 try:
141 first_number = int(spis[0].split('-')[0]) #Получаем первое число деля строку с числами на две
142 second_number = int(spis[0].split('-')[1]) #Получаем второе число
143 random_num = random.randint(first_number, second_number)
144 send_message(str('Рандомное число: ' + str(random_num)))
145 except:
146 send_message('неправильные числа представлены!')
147
148
149
150 elif 'орёл/решка' in event.obj.text.lower():
151 Headstails = random.randint(1,2)
152
153 if Headstails == 1:
154 d = 'Орёл'
155 elif Headstails == 2:
156 d = 'Решка'
157 send_message(str(d))
158
159
160 elif event.obj.text.lower() == 'время':
161 send_message('В моей базе данных есть только: \n1. екатеринбург UTC+05\n2. москва UTC+03')
162 print(event.obj.text)
163
164
165
166 elif event.obj.text.lower() in citymoscow:
167 morning = [6,7,8,9]
168 day = [10,11,12,13,14,15,16,17,18,19,20,21,22]
169 night = [23,24,0,1,2,3,4,5]
170 time = datetime.now(timezone.utc)
171 utc = time.hour + 3
172 if utc in morning:
173 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s morning, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
174 elif utc in day:
175 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s day, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
176 elif utc in night:
177 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s night, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
178 send_message(st)
179 print(event.obj.text)
180
181 elif event.obj.text.lower() in sityekb:
182 morning = [6,7,8,9]
183 day = [10,11,12,13,14,15,16,17,18,19,20,21,22]
184 night = [23,24,0,1,2,3,4,5]
185 time = datetime.now(timezone.utc)
186 utc = time.hour + 5
187 if utc in morning:
188 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s morning, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
189 elif utc in day:
190 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s day, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
191 elif utc in night:
192 st = ('Today is March, ' + str(time.day) + ', ' + str(time.year) + '.' + ' it\'s night, ' + str(utc) + ':' + str(time.minute) + ':' + str(time.second) )
193 send_message(st)
194 print(event.obj.text)
195
196
197
198 elif event.obj.text.lower() == 'кик':
199 try:
200 chat_id = int(str(event.obj.peer_id)[-1:])
201 user_id = event.obj['reply_message']['from_id']
202 vk.method("messages.removeChatUser", {"chat_id": chat_id ,"user_id": user_id })
203 except Exception as e:
204 print(e)
205
206
207# vk.method('сам метод',{параметры метода})