From 3f81d643abef04401f6bfd5873c6b57e78012210 Mon Sep 17 00:00:00 2001 From: dan63047 Date: Sat, 4 Apr 2020 19:07:39 +0300 Subject: [PATCH] normal bot --- .gitignore | 1 + README.md | 5 +- __pycache__/config.cpython-38.pyc | Bin 0 -> 303 bytes __pycache__/dan63047bot.cpython-38.pyc | Bin 2050 -> 4229 bytes dan63047bot.py | 117 ++++++++++++++++++++----- start.py | 31 ++++--- 6 files changed, 117 insertions(+), 37 deletions(-) create mode 100644 .gitignore create mode 100644 __pycache__/config.cpython-38.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4acd06b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.py diff --git a/README.md b/README.md index ae279cd..5fa56c0 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# dan63047pythonbot - lol +#### Мой личный бот на python для ВК +# от dan63047 + diff --git a/__pycache__/config.cpython-38.pyc b/__pycache__/config.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c317ce7a3ab62b4930bdea7a76ca3a47c0d69ee GIT binary patch literal 303 zcmYjK!A^rf5ZwjZG$!>6`~fZoc3~HcX*BWdrNILs8rYpxq-6=vCjA31^*{V2uAck_ zPmX%fm&}{IH*aRLJh}!X?)!1CfeQfdLtbR2oxp9zz(FLZ+dBI06=E zBZ7p*68B44Y6z82r`c#5Xnk**@0*9Rt9u9kO|!e^x~nH=-@K82j?NE#uGB@54bTsT zE?dEi8>@C(Xvd-G4&#$;D?9#9f=K>3%C@F{Jns(E;&N;CZUZZdCkGE{K|T5fpixb@ literal 0 HcmV?d00001 diff --git a/__pycache__/dan63047bot.cpython-38.pyc b/__pycache__/dan63047bot.cpython-38.pyc index e3fb01948a927653f2a15480513df5c655076ee5..b5b0799bc3c0134d03141140286ee6eb5c2c2559 100644 GIT binary patch literal 4229 zcmcInTXWmi5e7gI1Sv|k6-Ba~IDrx?FVlAMo0l&gd`rsox$@G9~+|Go^%c z**&}1vuDq@i{qW08417Jf4Tn2>268-H%;1q2~56^C-?{rlbGyC`M8(!vY0D*1-;@V zN@`w}iI;GaB`vRsvFfBsdR{N3^J!W7p~R9*yCyMhPRVDOJR#*$%g`&0=j2GaFoU-9 zpjD`Z_GHDG@G9k;5@k-z{M2)&j(Ls~b)1+va=~)Lk1v<4BFVM?RxSMiR7)c3V42L6 zYf?U8sVu?NYto#YPsTRnHI`yJcqx`<8T2~qfIZnLd1B_E7Z#N^-89zl9KsW9LleRg zbFwVe^2JBK{%0gedY}%}<3`|$`fl6TcG)oUm`S1n}lLOP1Q_dx#WZAdfFw)KA6GuKW zKRg_z%|kysdi22f;R$$64J>CeN|i04;BS(jg(c4p6-Un;htA*(E4c6PK6BVBR!Z<^ zaHf1Yoc7$aUKn#m_UwC+0`746GTvy~t{s|Y2YG|sA}PA8Db+6FxZxFcQ6^UFr=q6= z5*|E=0h8K^z)&5qNeyGwFFDdDE>Q4tt;op;NQePsV<-22znCqjUm@L&3vQ*v7)G%2~%*lOHU9G8_ zbW%Dk{aKm7J*y|KBu-)GDyO8H!jk>CSN)RDSgM|MRi@XIEovH^44ij`b<{O?OB*!{ z>X)n&RF!qrwH9Xs)^BXd++&;SDfh4II3)K^)(y@V>o~7~^B>j&PPmTq>WuOm*;iOE zc&FC!`ULL{wi&#!b-aGT8)aL-GuH856TB1bb?{WSwVn#KbK0F$+p0JErMq%nZ&BXF zu8h7FZw>TIeG+@CPlAVI|GnLhU<7R&)+EsnqSw&BgI>R*vv=Z@X_FlV`u&SKHaM*Z3hTjFR)mJ?iT-&&sXR!@;~uLb2dug zeap14(nZ8SkZ|)Vf5ac~hsy+KG5uC^j{if@m-xd9#X8Aj(S6v_XkLXSi+m}cUfoBe zmz_d5>G`FqUK+kIGhFmadCfis@UWKYg6CEHSb;5*P5IOTm-(K}mXnxOJ5Sm!^DYKP zyqJuwW>#oBN0w7W&|;OsEqM6@{?y=4`D5})^BTbNQ~soRL-=Klk=R|NhIYxyXC`eQ zK6eWx>zQmsvE?+YY=VCBAOAi7mMpw88HggFhM_JUTi! zQB{oX&*WS#?bDG&TFC+mvj|Qw3uQaXSeJ@cIkY`Di1Y(x`-ty*K8`l@Bb^mOi#8l} z5?s+J2n(fhq=P$2Qz#|O@yW`(2u{HEq!%R|&xy2x8(g$}e>1J1JC<03=#-pvt)o^{gE#i{M!{H znm0xb5mOb4nAQ8R5X(0|gY+Xpu~8%6xpsG&2y*{ji22*8$x*X|n(v^=X>IYEY54&G z>wlM4j8L=m z3t?C&PE!>K1hp=O{@d8K$T4|!x?)ZH`!KKem#4kZdvE9WMt1MoHL`E7xo7XbUAr;c z?Y~d!x1gy|HN}4mtiIktSN}EQy-B<)Ksf&QR>eC6PzTh;X@){>v3Y|~a{=f}IcFZ( z=W+8ULN?BUh*_{uI1>{Ia@Y`o_Z4VQM93~6EQu6X&&GQOLU~C@{1Rb}LYuPcb;D+a zzA*7CvAC6tjU6`I@e-K_FsqewApHv{`U1diG=B{v@M20#FG<_HA#|@?xgXvvmE%Rfkr1`{oO;6K5jcz9`P*327$Btk+GaYrsgd0-rf_P&wh5=^;aW!^9q6 z*$KpnOLYtk1k%B|ZArBe=WN6PETkfdvMt$qbJQ5wGmQUTBfCb7?GS6gx&~HY*P?bZ z;xCz;zmS zS{KcgMGy=K6(u=?zixajWRz~XN7>fuyX9`Bx+%t>Ho5U!nm(!skWDknm}bdi6^F)I z(>z}(I5EekN-oMG&4+d|t`z)NL3(brKT6Z*7K#yFN}sYR?KL2huIMR6&UEQJ^bLZO z>xcn)2+T}Btd W^s#tP`>7<2jevJ_R1aBsW8%L&hIwuP delta 1139 zcmZuw-Ahza5I^VKPrud=5-`VxuW07_O&yqF?#yrI%>B)rx3QJB$di_qMgnK@^ZJWk zV6|SxkuCB7Q&S{FowL?TtY;5&c7#JfU?sZT$NmEYJj8o3m zNLo2cOsibuI(%!~fMhe!o-T|PeK);kNbrBx-}pcLU4O5>Qqp6&*OtReEH>wvVbDMDfBHMs@AO8K=h^~- zUx;X|{-Ki<4FIkViZGMvN+}Yym#{1+??}tK&?jP1!ahg9kfcUAm8=Zic9Ctm%%oCN z%WPibY@01BWm412O3mQPHsxv$BGj^4Gq-`y9{dl@nkco;Nm+DkS z)@j(95rv$!v;b7LK-k54gm%yfyTnRYk2yTfs0a%yo=dsFDo$Sk30Zvx22On*HlT+r zFwwzT>cpdjo_-E{Fi$^`&9jIWMuxe5iZw#dV{WF%IB!UiaBUhVLK?kZxW(T(TbbME z_a}CURD1Ya{zreO{w@le^=&A6h>d!guk+2%S>;}0;7($2U~u3NTlYE;ymho@Q0&Nv zd41^K^!K8n>lf77hk_rX{z0_9?(g~gQGd7oK9NYonJ@q=a1p^qHUlGPyKZLopGh?3 z?U&cA<6tKsUA&zr5vsBXZ3a=%R;r7wom8)`xAu+W6A|60uAn*_ZD`?q1-?K0mGCW? y%!CvA;zppum@`EOR?30BXs;&QI`1PF0`Vc}e-#7sL9W2PtUZi$x>&!Pw$Z=wXC~VK diff --git a/dan63047bot.py b/dan63047bot.py index ae6d1e1..25427e7 100644 --- a/dan63047bot.py +++ b/dan63047bot.py @@ -1,38 +1,109 @@ -import vk_api, time, bs4 +import vk_api +import datetime +import requests +from config import vk +from bs4 import BeautifulSoup from vk_api.longpoll import VkLongPoll, VkEventType + + class VkBot: def __init__(self, peer_id): - + print("\nСоздан объект бота!") self._USER_ID = peer_id - #self._USERNAME = self._get_user_name_from_vk_id(user_id) - - self._COMMANDS = ["привет", "!my_id", "!h", "пока"] - def _get_user_name_from_vk_id(self, user_id): - request = requests.get("https://vk.com/id"+str(user_id)) - bs = bs4.BeautifulSoup(request.text, "html.parser") + self._COMMANDS = ["!image", "!my_id", "!h", "!user_id", "!group_id", "!help"] + + @staticmethod + def _clean_all_tag_from_str(string_line): + result = "" + not_skip = True + for i in list(string_line): + if not_skip: + if i == "<": + not_skip = False + else: + result += i + else: + if i == ">": + not_skip = True + return result + + def get_info_user(self, id): + try: + user_info = vk.method('users.get', {'user_ids': id, 'fields': 'verified,last_seen,sex'}) + except vk_api.exceptions.ApiError as lol: + answer = "Пользователь не найден
"+str(lol) + return answer - user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) + if user_info[0]['is_closed']: + is_closed = "Да" + else: + is_closed = "Нет" + + if user_info[0]['sex'] == 1: + sex = "Женский" + elif user_info[0]['sex'] == 2: + sex = "Мужской" + else: + sex = "Неизвестно" + + if user_info[0]['last_seen']['platform'] == 1: + platform = "m.vk.com" + elif user_info[0]['last_seen']['platform'] == 2: + platform = "iPhone" + elif user_info[0]['last_seen']['platform'] == 3: + platform = "iPad" + elif user_info[0]['last_seen']['platform'] == 4: + platform = "Android" + elif user_info[0]['last_seen']['platform'] == 5: + platform = "Windows Phone" + elif user_info[0]['last_seen']['platform'] == 6: + platform = "Windows 10" + elif user_info[0]['last_seen']['platform'] == 7: + platform = "vk.com" + else: + platform = "тип платформы неизвестен" + + time = datetime.datetime.fromtimestamp(user_info[0]['last_seen']['time']) + + answer = user_info[0]['first_name']+" "+user_info[0]['last_name']+"
Его ид: "+str(user_info[0]['id'])+"
Профиль закрыт: "+is_closed+"
Пол: "+sex+"
Последний онлайн: "+time.strftime('%d.%m.%Y в %H:%M:%S')+" ("+platform+")" + + return answer + + def get_info_group(self, id): + try: + group_info = vk.method('groups.getById', {'group_id': id, 'fields': 'description,members_count'}) + except vk_api.exceptions.ApiError as lol: + answer = "Группа не найдена
"+str(lol) + return answer - return user_name.split()[0] + if group_info[0]['description'] == "": + description = "Отсутствует" + else: + description = group_info[0]['description'] + + answer = group_info[0]['name']+"
Описание: "+description+"
Ид группы: "+str(group_info[0]['id'])+"
Подписчиков: "+str(group_info[0]['members_count']) + return answer def new_message(self, message): + respond = {'attachment': None, 'text': None} + message = message.split(' ') + if message[0] == self._COMMANDS[0]: + respond['text'] = "hueh" + respond['attachment'] = "photo-190322075_457239033" - # Привет - if message == self._COMMANDS[0]: - return f"Привет-привет!" + elif message[0] == self._COMMANDS[1]: + respond['text'] = "Ваш ид: "+str(self._USER_ID) - elif message == self._COMMANDS[1]: - return f"Ваш ид: {self._USER_ID}" + elif message[0] == self._COMMANDS[2] or message[0] == self._COMMANDS[5]: + respond['text'] = "Я бот, призванный доставлять неудобства.
Команды:
!my_id - сообщит ваш id в ВК
!user_id *id* - сообщит информацию о этом пользователе
!group_id *id* - сообщит информацию о этой группе
!image - отправляет пока что только одну картинку (скоро планируется отправлять рандомную картинку из альбома)
!h, !help - справка
Дата последнего обновления: 04.04.2020 (перевод на python)" - elif message == self._COMMANDS[2]: - return f"Я бот, призванный доставлять неудобства.
Команды:
!my_id - сообщит ваш id в ВК
!user_id *id* - сообщит информацию о этом пользователе
!group_id *id* - сообщит информацию о этой группе
!image - отправляет пока что только одну картинку (скоро планируется отправлять рандомную картинку из альбома)
!h, !help - справка
Дата последнего обновления: 08.03.2020" + elif message[0] == self._COMMANDS[3]: + respond['text'] = self.get_info_user(message[1]) - # Пока - elif message == self._COMMANDS[3]: - return f"Пока-пока!" - - else: - return "Не понимаю о чем вы..." + elif message[0] == self._COMMANDS[4]: + respond['text'] = self.get_info_group(message[1]) + + return respond diff --git a/start.py b/start.py index d99cb7a..ecff752 100644 --- a/start.py +++ b/start.py @@ -1,22 +1,29 @@ -import vk_api, time, bs4 +import vk_api +import time +import requests +from config import vk +from bs4 import BeautifulSoup from dan63047bot import VkBot -from vk_api.longpoll import VkLongPoll, VkEventType +from vk_api.longpoll import VkLongPoll, VkEventType -def write_msg(peer_id, message): - vk.method('messages.send', {'peer_id': peer_id, 'message': message, 'random_id': time.time()}) -token = "9c2e8fbc0fb7c846315e2f7758373d92e6961cefe74697ffb335e14a67916e54e20df6082577c8a7ade1c"# API-ключ созданный ранее -vk = vk_api.VkApi(token=token)# Авторизуемся как сообщество -longpoll = VkLongPoll(vk)# Работа с сообщениями +def write_msg(peer_id, message, attachment=None): + vk.method('messages.send', {'peer_id': peer_id, + 'message': message, + 'random_id': time.time(), + 'attachment': attachment}) + +longpoll = VkLongPoll(vk) # Работа с сообщениями print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: - + print('New message:') print(f'For me by: {event.peer_id}', end='') - + bot = VkBot(event.peer_id) - write_msg(event.peer_id, bot.new_message(event.text)) - - print('Text: ', event.text) \ No newline at end of file + if bot.new_message(event.text)['text']: + write_msg(event.peer_id, bot.new_message(event.text)['text'], bot.new_message(event.text)['attachment']) + + print('Text: ', event.text)