コード例 #1
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
    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)
コード例 #2
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
 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
コード例 #3
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
 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
コード例 #4
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
    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
コード例 #5
0
ファイル: network.py プロジェクト: lolomap/PajitnovBot
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
コード例 #6
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
    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
コード例 #7
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
    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)
コード例 #8
0
    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
コード例 #9
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
    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
コード例 #10
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
    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
コード例 #11
0
ファイル: botstart.py プロジェクト: lolomap/PajitnovBot
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)
コード例 #12
0
ファイル: VK_API.py プロジェクト: lolomap/PajitnovBot
    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