def edit_msg(self, session_event, msg_id, text): log = Log() log.action = 'edit_msg' log.sender = self log.log_var(event=session_event, msg_id=msg_id, text=text) try: try: self.vk_session.messages.edit( peer_id=session_event.obj['peer_id'], message=text, message_id=msg_id ) except vk_api.VkApiError: self.write_msg(session_event, text) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_info=e) self.class_logger.log_info(log)
def create_keyboard(self, button_text, url=None): log = Log(button_text=button_text) log.action = 'create_keyboard' log.sender = self ''' keyboard = "{\"inline\": true, " \ "\"buttons\": [[{\"action\": {\"type\": \"text\"," \ " \"payload\": \"{\"button\": \"1\"}\"," \ "\"label\": \""+button_text+"\"}, \"color\": \"positive\"}]]}" ''' if url is None: keyboard = "{\"inline\": true, " \ "\"buttons\": [[{\"action\": {\"type\": \"text\"," \ "\"label\": \"" + button_text + "\"}, \"color\": \"positive\"}]]}" else: keyboard = "{\"inline\": true, " \ "\"buttons\": [[{\"action\": {\"type\": \"open_link\"," \ "\"label\": \"" + button_text + "\", \"link\": \""+url+"\"}}]]}" log.log_var(keyboard=keyboard) log.status = 'OK' self.class_logger.log_info(log) return keyboard
def mark_msg_read(self, msg_id, peer_id): log = Log() log.action = 'mark_msg_read' log.sender = self log.log_var(msg_id=msg_id, peer_id=peer_id) res = 0 log.log_var(res=res) try: res = self.vk_session.messages.markAsRead(msg_id, peer_id) log.log_var(res=res) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_info=e) self.class_logger.log_info(log) return res
def get_user(self, user_id): log = Log() log.action = 'get_user' log.sender = self log.log_var(user_id=user_id) res = None log.log_var(res=res) try: res = self.vk_session.users.get(user_ids=user_id) log.log_var(res=res) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_info=e) self.class_logger.log_info(log) return res
def get_site(url): log = Log() log.action = 'get_site' log.log_var(url=url) response = None log.log_var(response=response) try: if url.find('http') < 0: url = 'http://'+url response = requests.get(url) log.log_var(response=response) log.status = 'OK' except requests.RequestException as e: log.status = 'Exception' log.log_var(exception_info=e) logger.log_info(log) return response
def get_conversation_members(self, peer_id): log = Log() log.action = 'get_conversation_members' log.sender = self log.log_var(peer_id=peer_id) res = None log.log_var(res=res) try: res = self.vk_session.messages.getConversationMembers(peer_id=peer_id)['profiles'] log.log_var(res=res) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_info=e) self.class_logger.log_info(log) return res
def create_session(self, group_token, group_id): log = Log() log.sender = self log.action = 'create_session' log.log_var(group_id=group_id) try: api = vk_api.VkApi(token=group_token) log.log_var(api=api) self.longpoll = api_longpoll.VkBotLongPoll(api, group_id) self.vk_session = api.get_api() log.log_var(longpoll=self.longpoll, vk_session=self.vk_session) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_info=e) self.class_logger.log_info(log)
def clean_html(self, url): log = Log() log.sender = self log.action = 'clean_html' res = None log.log_var(url=url, res=res) try: article = newspaper.Article(url) log.log_var(article=article) article.download() article.parse() cleaned = article.text res = cleaned log.log_var(res=res) log.status = 'OK' except newspaper.ArticleException as e: log.log_var(exception_info=e) log.status = 'Exception' self.logger.log_info(log) return res
def get_conversations(self): log = Log() log.action = 'get_conversations' log.sender = self res = None log.log_var(res=res) try: res = self.vk_session.messages.getConversations()['items'] log.log_var(res=res) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_var=e) self.class_logger.log_info(log) return res
def get_event_type(self, event): log = Log() log.action = 'get_event_type' log.sender = self log.log_var(event=event) res = None log.log_var(res=res) try: if event.type == api_longpoll.VkBotEventType.MESSAGE_NEW: res = 'MESSAGE_NEW' elif event.type == api_longpoll.VkBotEventType.MESSAGE_TYPING_STATE: res = 'MESSAGE_TYPING_STATE' else: res = 'UNKNOWN' log.log_var(res=res) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_ifo=e) self.class_logger.log_info(log) return res
def main(): regex = r'(?:https?:\/\/)?(?:[\w\.]+)\.(?:[a-z]{2,6}\.?)(?:\/[\w\.]*)*\/?' logger = Logger('Main', 'info', '*****@*****.**') api = VK_API.VK_API(sys.argv[1], sys.argv[2]) cleaned = '' link = '' url = '' while True: for event in api.longpoll.listen(): if api.get_event_type(event) == 'MESSAGE_NEW': log = Log(event=event) log.action = 'main' try: msg_text = event.obj.text log.log_var(msg_text=msg_text) if 'attachments' in event.obj.keys(): if event.obj['attachments'][0]['type'] == 'link': url = event.obj['attachments'][0]['link']['url'] if msg_text == sys.argv[3]: log.log_var(action='STOP PROGRAM', sender='User') log.status = 'OK' logger.log_info(log) # api.mark_msg_read(event.obj['id'], event.obj['peer_id']) exit('Stopped by user') # and event.obj['payload'] == "{\"button\": \"1\"}" if msg_text == 'Читать дальше': if len(cleaned) < 1401: api.write_msg(event, cleaned) else: api.write_msg(event, cleaned[:1400] + '...', keyboard=api.create_keyboard( 'Читать полностью в источнике', url=link)) log.status = 'OK' logger.log_info(log) break if url == '': url_f = re.search(regex, msg_text) if url_f is not None: url = url_f.group(0) else: break if url.find('http://') < 0: url = 'http://' + url parsing = ParsingFile() log.log_var(parsing=parsing) cleaned = parsing.clean_html(url) if cleaned == '' or cleaned is None: raise Exception('Cleaning error') log.log_var(cleaned=cleaned) if len(cleaned) < 501: api.write_msg(event, cleaned) else: link = msg_text api.write_msg( event, cleaned[:500] + '...', keyboard=api.create_keyboard('Читать дальше')) log.status = 'OK' except Exception as e: log.status = 'Exception' log.log_var(exception_info=e) # api.write_msg(event, 'Произошла ошибка на сервере.') logger.log_info(log)
def write_msg(self, session_event, text, sticker_id=None, picture=None, keyboard=None): log = Log() log.action = 'write_msg' log.sender = self log.log_var(event=session_event, text=text, sticker_id=sticker_id, picture=picture, keyboard=keyboard) res = None log.log_var(res=res) try: data = {'peer_id': session_event.obj['peer_id'], 'random_id': session_event.obj['random_id']} if text and picture is None: data['message'] = text if sticker_id is not None: data['sticker_id'] = sticker_id if picture is not None: photo_file = self.vk_session.photos.getMessagesUploadServer( peer_id=session_event.obj['peer_id']) log.log_var(photo_file=photo_file) r_data = {'photo': open('images/pitivo.jpg', 'rb')} log.log_var(r_data=r_data) photo_data = requests.post(photo_file['upload_url'], files=r_data).json() log.log_var(photo_data=photo_data) photo = self.vk_session.photos.saveMessagesPhoto(server=photo_data['server'], photo=photo_data['photo'], hash=photo_data['hash'])[0] log.log_var(photo=photo) data['attachment'] = 'photo{0}_{1}'.format(photo['owner_id'], photo['id']) data['message'] = text if keyboard is not None: data['keyboard'] = keyboard # res = self.vk_session.messages.send(data) if keyboard is None: res = self.vk_session.messages.send(peer_id=data['peer_id'], message=data['message'], random_id=data['random_id']) else: res = self.vk_session.messages.send(peer_id=data['peer_id'], message=data['message'], keyboard=data['keyboard'], random=data, random_id=data['random_id']) log.log_var(res=res) log.status = 'OK' except vk_api.VkApiError as e: log.status = 'Exception' log.log_var(exception_info=e) self.class_logger.log_info(log) return res