Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2020
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.42 KB | None | 0 0
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import vk_api
  4. from vk_api.bot_longpoll import VkBotLongPoll
  5. from vk_api.utils import get_random_id
  6. from datetime import datetime, timezone
  7. import datetime
  8. import time
  9. import random
  10. import pyowm
  11. import requests, json # Модуль для обработки URL
  12. from bs4 import BeautifulSoup # Модуль для работы с HTML
  13.  
  14. vk = vk_api.VkApi(token='3709764b230f73dbf6a6fca9c41e726af8c0e28eff5ea171f2e25d6b5d3761711e9cf46b77cbf3d7c47ba') #токен паблика
  15.  
  16. class 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.  
  25. bot_id = '193179464' # сюда id паблика
  26. longpoll = MyVkLongPoll(vk, bot_id)
  27. log = [
  28. '''
  29. недавние команды:
  30.  
  31. '''
  32. def send_message(msg):
  33. vk.method('messages.send',{'random_id':get_random_id(),'peer_id':event.obj.peer_id,'message':msg})
  34.  
  35. def game(name, date1,date2,date3):
  36. # Значение: datetime.datetime(2017, 4, 5, 0, 18, 51, 980187)
  37. now = datetime.datetime.now()
  38. then = datetime.datetime(date1,date2,date3)
  39. time = then - now
  40. days = time.days
  41. send_message(str(name) + str(days) + ' days' )
  42.  
  43.  
  44. def get_id(text): #функция для удобного получения id из всего сообщения
  45. split_msg = text.split(' ')
  46. for i in split_msg:
  47. if 'id' in i:
  48. if '-' in i:
  49. id = i.split('|')[0].replace('@id-','')
  50. return -(int(id))
  51. id = i.split('|')[0].replace('[id','')
  52. return int(id)
  53. elif 'club' in i:
  54. id = i.split('|')[0].replace('[club','')
  55. return -(int(id))
  56. id_from_message = get_id(event.obj.text)
  57.  
  58. def cryptofunc(URL, clas, btc):
  59. BTC = URL
  60.  
  61. ist = requests.get(BTC)
  62.  
  63. textbtc = ist.text
  64.  
  65. soupbtc = BeautifulSoup(textbtc)
  66.  
  67. tablebtc3 = soupbtc.findAll("span", {"class": clas})
  68.  
  69. send_message(name + str(tablebtc3[0].text))
  70.  
  71.  
  72. citymoscow = ['moscow','время мск' ,'мск', 'время москва'] #Время Москва UTC + 3
  73. sityekb = ['ект', 'екб', 'время екатеринбург', 'ekaterinburg', 'время екб'] #Время екб UTC +5
  74.  
  75. course = ['курсы','курс', 'курсы валют', 'валюта', 'валюты', 'курс доллара', 'доллар', 'usd', 'евро', 'euro', 'курс евро', 'курсы валют', 'Валюта', 'нефть', 'курс нефти', 'oil'] #курсы валют
  76. kripta = ['крипта','криптовалюта','биткоин','kripta','крипто валюта']
  77.  
  78.  
  79. tlou2 = ['tlou', 'tlou2', 'тлоу', 'тлоу2']
  80. gost = ['gost', 'гост', 'тсушима']
  81. marvel = ['марвел', 'marvel\'s avengers', 'marvels avengers','мстители']
  82. cyberpunk = ['киперпанк','cyberpunk','cyberpunk 2077']
  83.  
  84. koronavirus = ['коронавирус', 'covid', 'корона', 'вирус', 'coronavirus', 'мониторинг коронавируса']
  85.  
  86.  
  87.  
  88.  
  89.  
  90. for event in longpoll.listen(): #начинаем слушать лонгпулл
  91. if event.obj:
  92. if event.obj.text.lower() in ('комманды', '/комманды', 'commands', '/commands','команды'):
  93. send_message('Вот что я умею: \n1. /rand "число1-число2" \n2. Время "город" \n3. Погода "Город" \n4. Курсы валют \n5. Мониторинг коронавируса \
  94. \n6. Дата выхода Gost/tlou2/Marvel Avenger\'s/Cyberpunk 2077 \n7.Орёл/Решка')
  95. log = log + 'команды, '
  96. print(event.obj.text)
  97. elif event.obj.text.lower() == 'привет':
  98. send_message('привет')
  99. print(event.obj.text)
  100. elif event.obj.text.lower() == 'пока':
  101. send_message('пока')
  102. print(event.obj.text)
  103. id_from_message = event.obj.from_id
  104. ids = get_id(event.obj.text)
  105. print(id_from_message)
  106. print(ids)
  107.  
  108. #elif event.obj.text.lower() == 'kick':
  109. #chat_id = int(str(event.obj.peer_id)[-1:])
  110. #vk.method('messages.removeChatUser',{'chat_id':chat_id,'member_id':504708567})
  111.  
  112. elif event.obj.text.lower() in kripta:
  113. log = log + 'курс криптовалюты, '
  114. BTC = 'https://www.coingecko.com/ru'
  115.  
  116. ist = requests.get(BTC)
  117.  
  118. textbtc = ist.text
  119.  
  120. soupbtc = BeautifulSoup(textbtc)
  121.  
  122. tablebtc = soupbtc.findAll("span", {"class": 'no-wrap'})
  123. tablebtc1 = soupbtc.findAll("span", {"data-coin-id": '1'})
  124.  
  125. tableeth1 = soupbtc.findAll("span", {"data-coin-id": '279'})
  126.  
  127. send_message('BTC = ' + str(tablebtc[0].text) + ' $ ' + '▲' + str(tablebtc1[2].text) + ' за день'\
  128. '\n ETH = ' + str(tableeth1[0].text) + ' $ ' + '▲' + str(tableeth1[2].text) + ' за день' )
  129.  
  130. elif event.obj.text.lower() in course:
  131. log = log + 'курс валют'
  132.  
  133. oil = 'https://yandex.ru/news/quotes/1006/'
  134. dollar_rub = 'https://yandex.ru/news/quotes/1.html'
  135. euro_rub = 'https://yandex.ru/news/quotes/23.html'
  136. CNY = 'https://yandex.ru/news/quotes/10018.html'
  137. # Парсим всю страницу
  138. source1 = requests.get(dollar_rub)
  139. source2 = requests.get(euro_rub)
  140. source3 = requests.get(oil)
  141. source4 = requests.get(CNY)
  142.  
  143. main_text1 = source1.text
  144. main_text2 = source2.text
  145. main_text3 = source3.text
  146. main_text4 = source4.text
  147. # Разбираем через BeautifulSoup
  148. soup1 = BeautifulSoup(main_text1)
  149. soup2 = BeautifulSoup(main_text2)
  150. soup3 = BeautifulSoup(main_text3)
  151. soup4 = BeautifulSoup(main_text4)
  152.  
  153. # Получаем нужное для нас значение и возвращаем его
  154. table1 = soup1.findAll("td", {"class": "quote__value"})
  155. table2 = soup2.findAll("td", {"class": "quote__value"})
  156. table3 = soup3.findAll("td", {"class": "quote__value"})
  157. table4 = soup4.findAll( "td", { "class": "quote__value" } )
  158. #tr = table.find( "span", { "class": "quote__sgn" } )
  159.  
  160.  
  161. send_message('Доллар = ' + str(table1[0].text[:5]) + ' рублей' + '\nЕвро = ' + str(table2[0].text[:5]) + ' рублей' +\
  162. '\nЮань = ' + str(table4[0].text[:5]) + ' Рублей' + '\n ' + '\nНефть = ' + str(table3[0].text) + ' USD' )
  163.  
  164.  
  165. elif event.obj.text.lower() in koronavirus:
  166. oil = 'https://dev.by/news/poyavilsya-onlain-servis-dlya-monitoringa-rasprostraneniya-koronavirusa'
  167. log = log + 'статистика коронавируса, '
  168.  
  169. source = requests.get(oil)
  170. main_text = source.text
  171. soup = BeautifulSoup(main_text)
  172.  
  173. USA = soup.findAll( "", { "class": "data row1 col1"} )
  174. ITALIA = soup.findAll( "", { "class": "data row2 col1"} )
  175. SPANISH = soup.findAll( "", { "class": "data row3 col1"} )
  176. CHINA = soup.findAll( "", { "class": "data row4 col1"} )
  177. GERMANY = soup.findAll( "", { "class": "data row5 col1"} )
  178. RUSSIA = soup.findAll( "", { "class": "data row32 col1"} )
  179. send_message('Заражённых в сша: ' + str(USA[0].text) + '\nЗаражённых в Италии ' + str(ITALIA[0].text)) + '\nЗаражённых в России ' + str(RUSSIA[0].text))
  180.  
  181.  
  182.  
  183. elif 'погода' in event.obj.text.lower():
  184.  
  185. # Enter your API key here
  186. #api_key = "c012abf83e8afdf40810863f64ae8618"
  187.  
  188. # base_url variable to store url
  189. #base_url = "http://api.openweathermap.org/data/2.5/weather?"
  190. # Give city name
  191. owm = pyowm.OWM('c012abf83e8afdf40810863f64ae8618', language = 'ru')
  192.  
  193. try:
  194. city_name = event.obj.text.split(' ')[1:][0] #Получаем всё, что идёт после "погода"
  195. log = log + city_name, ', '
  196. #pyowm
  197. observation = owm.weather_at_place(city_name)
  198. w = observation.get_weather()
  199. temp = w.get_temperature('celsius')['temp']
  200. status = w.get_detailed_status()
  201.  
  202. # print following values
  203. send_message(" Температура (в цельсиях): " +
  204. str(temp) + '°' +
  205. #"\n atmospheric pressure (in hPa unit) = " +
  206. #str(current_pressure) +
  207. #"\n humidity (in percentage) = " +
  208. #str(current_humidiy) +
  209. "\n Состояние: " +
  210. str(status))
  211. except:
  212. send_message('Город не найден')
  213.  
  214.  
  215. elif '/rand' in event.obj.text.lower():
  216. spis = event.obj.text.split(' ')[1:] #Получаем всё, что идёт после "рандом"
  217. pered = event.obj.text.split(' ')[:1] #Получаем всё, что идёт перед "рандом"
  218. log = log + 'рандом', spis, ', '
  219. pred = ' '.join(pered)
  220.  
  221. if len(spis)>1:
  222. send_message('Неправильно набрана команда!')
  223. elif pred != '/rand':
  224. send_message('ты нахуй пишешь чото перед /rand')
  225. continue
  226. else:
  227. try:
  228. first_number = int(spis[0].split('-')[0]) #Получаем первое число деля строку с числами на две
  229. second_number = int(spis[0].split('-')[1]) #Получаем второе число
  230. random_num = random.randint(first_number, second_number)
  231. send_message(str('Рандомное число: ' + str(random_num)))
  232. except:
  233. send_message('неправильные числа представлены!')
  234.  
  235.  
  236.  
  237. elif 'орёл/решка' in event.obj.text.lower():
  238. Headstails = random.randint(1,2)
  239. log = log + 'орёл/решка, '
  240.  
  241. if Headstails == 1:
  242. d = 'Орёл'
  243. elif Headstails == 2:
  244. d = 'Решка'
  245. send_message(str(d))
  246.  
  247.  
  248.  
  249. elif event.obj.text.lower() in tlou2:
  250. game('Until the release of "The Last of Us Part 2" left to wait ' , 2020,5,29)
  251. log = log + 'time to release The Last of Us Part 2, '
  252.  
  253.  
  254. elif event.obj.text.lower() in gost:
  255. game('Until the release of "Ghost of Tsushima" left to wait ', 2020, 6, 26)
  256. log = log + 'time to release Ghost of Tsushima, '
  257.  
  258. elif event.obj.text.lower() in cyberpunk:
  259. game('Until the release of "Cyberpunk 2077" left to wait ', 2020, 9, 17)
  260. log = log + 'time to release Cyberpunk 2077, '
  261.  
  262. elif event.obj.text.lower() in marvel:
  263. game('Until the release of "Marvel\'s Avengers" left to wait ', 2020, 9, 4)
  264. log = log + 'time to release marvel, '
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275. elif 'время' in event.obj.text.lower():
  276. utcp3 = ['москва','киров','адлер','азов','анапа','арзамас','балашиха','балахна','белгород','бор','владимир','воронеж',\
  277. 'вязьма','казань','липецк','пенза','тверь','тамбов','сочи','смоленск','псков','подольск','питер','санкт-петербург','киев','минск','нижний-новгород']
  278. time = datetime.datetime.now(timezone.utc)
  279. utc3 = time.hour + 3
  280. if utc3 > 24:
  281. a = utc3 - 24
  282. else:
  283. a = time.hour + 3
  284. st = (str(a) + ':' + str(time.minute) + ':' + str(time.second) )
  285.  
  286. spis = event.obj.text.split(' ')[1:] #Получаем всё, что идёт после "время"
  287. city_name = ' '.join(spis)
  288. city = city_name.lower()
  289.  
  290. pered = event.obj.text.split(' ')[:1] #Получаем всё, что идёт перед "время"
  291. pered = ' '.join(pered)
  292. pered = pered.lower()
  293.  
  294. if city in utcp3:
  295. send_message('В городе ' + str(city.title()) + ' сейчас: ' + str(st))
  296. log = log + str(city , ', ')
  297. continue
  298. #elif len(spis)
  299. elif len(spis) < 3:
  300. if pered != 'время':
  301. send_message('ты нахуй пишешь чото перед время')
  302. continue
  303. elif city not in utcp3:
  304. send_message('Город не найден!')
  305. continue
  306.  
  307. print(pered)
  308.  
  309.  
  310. #elif event.obj.text.lower() in sityekb:
  311.  
  312.  
  313.  
  314.  
  315. elif event.obj.text.lower() == 'кик':
  316. log = log + 'кик, '
  317. try:
  318. chat_id = int(str(event.obj.peer_id)[-1:])
  319. user_id = event.obj['reply_message']['from_id']
  320. vk.method("messages.removeChatUser", {"chat_id": chat_id ,"user_id": user_id })
  321. except Exception as e:
  322. print(e)
  323.  
  324.  
  325. # vk.method('сам метод',{параметры метода})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement