示例#1
0
    def on_message(self, message: TextMessageProtocolEntity):
        try:
            """Received a message."""
            # Parse information
            sender = message.getFrom(full=False)
            oidtotg = message.getFrom(full=True)

            logger.debug('received message from %s' % oidtotg)

            # Send receipt
            self.toLower(message.ack(self.sendRead))

            # https://github.com/tgalal/yowsup/issues/1411#issuecomment-203419530
            # if isinstance(type(message), unicode) :
            # message = message.encode('utf-8')
            # entity = TextMessageProtocolEntity(message, sender)
            # self.toLower(entity)

            if not sender:
                logger.warning('Empty sender')
                return

            # Do stuff
            if is_blacklisted(sender):
                logger.debug('phone is blacklisted: %s' % sender)
                return

            participant = message.getParticipant()
            if participant:
                participant = participant.strip("@g.us")
            else:
                participant = sender
            if participant.find('@s.whatsapp.net') >= 0:
                participant = participant.strip('@s.whatsapp.net')

            contact_name = get_contact(participant)

            if not contact_name:
                contact_name = message.notify + "-" + participant

            # body = "<" + oidtotg + ">: " + message.getBody()
            # body = "NULL"
            if message.getType() == "text":
                logger.debug("is text message")
                if isinstance(message, TextMessageProtocolEntity):
                    body = message.getBody()
                elif isinstance(message, ExtendedTextMessageProtocolEntity):
                    body = message.text
                else:
                    logger.debug(str(message) + str(type(message)))
                    body = "Internal error"

                if body == '/getID' or body == '/link':
                    self.send_msg(phone=sender, message="/link " + sender)

                    HelpInstructions = "Please send the above message in the Telegram group that you would like to bridge!"
                    self.send_msg(phone=sender, message=HelpInstructions)
                    # self.send_msg(phone=sender, message="new registrations are closed. please contact https://youtu.be/9r-yzKfL8xw for bridging Telegram ")
                    return
                elif body[0:5] == '/add ':
                    if participant == sender:
                        name = body[5:]
                        if not name:
                            ReplyMessage = "Syntax: /add <name>"
                        else:
                            if contact_name:
                                db_rm_contact(contact_name)
                                db_add_contact(name, sender)
                                ReplyMessage = "name already existed. name removed and added. Pleae verify with ```/me```"
                            else:
                                db_add_contact(name, sender)
                                ReplyMessage = "name added. Pleae verify with ```/me```"
                        self.send_msg(phone=sender, message=ReplyMessage)
                        return
                elif body == '/me':
                    if not contact_name:
                        ReplyMessage = "Please send ```/add NAME``` to add you to my contacts."
                    else:
                        ReplyMessage = "I have saved your name as " + contact_name + ". You can edit your name in my contacts by sending ```/add NAME```!"
                    if participant == sender:
                        self.send_msg(phone=sender, message=ReplyMessage)
                        return
                elif body == '/bridgeOn':
                    toggle = db_toggle_bridge_by_wa(sender, True)

                    if toggle is None:
                        Message = 'This group is not bridged to anywhere. Use ```/link``` to start bridging.'
                    else:
                        Message = 'Bridge has been turned on!'

                    self.send_msg(phone=sender, message=Message)

                    return

                elif body == '/bridgeOff':
                    toggle = db_toggle_bridge_by_wa(sender, False)

                    if toggle is None:
                        Message = 'This group is not bridged to anywhere. Use ```/link``` to start bridging.'
                    else:
                        Message = 'Bridge has been turned off. Use ```/bridgeOn``` to turn it back on.'

                    self.send_msg(phone=sender, message=Message)

                    return

                if not db_is_bridge_enabled_by_wa(
                        sender) and message.isGroupMessage():
                    return

                logger.info("prefix WHO send this message, to message")
                TheRealMessageToSend = "<#" + contact_name + ">: " + body

                # Relay to Telegram
                logger.info('relaying message to Telegram')
                SIGNAL_TG.send('wabot',
                               phone=sender,
                               message=TheRealMessageToSend)

            if message.getType() == "media":
                if isinstance(message, DownloadableMediaMessageProtocolEntity):
                    filepath = download.download(message)
                    TheRealMessageToSend = message.media_type + ': <#' + contact_name + '>'
                    if isinstance(
                            message,
                        (VideoDownloadableMediaMessageProtocolEntity,
                         ImageDownloadableMediaMessageProtocolEntity
                         )) and message.caption and message.caption != '':
                        TheRealMessageToSend += ': ' + message.caption
                    media_message = DataMedia(filepath, message.media_type,
                                              TheRealMessageToSend)
                    # Relay to Telegram
                    logger.info('relaying message to Telegram')
                    SIGNAL_TG.send('wabot', phone=sender, media=media_message)
        except Exception as x:
            traceback.print_exc()