示例#1
0
def update(chat_id=None, offset=None):
    if offset is None:
        url = "https://api.telegram.org/bot" + bot_token + "/getUpdates"
    else:
        url = "https://api.telegram.org/bot" + bot_token + "/getUpdates?offset=" + str(offset)

    response = requests.get(url)

    if not response.text.startswith('{"ok":true'):
        return False

    json_obj = json.loads(response.text)['result']

    to_return = []
    for result in json_obj:
        current = None
        if 'message' in result:
            current = Message(json_obj=result['message'])
        if 'edited_message' in result:
            current = Message(json_obj=result['edited_message'])

        if current is not None and filter_message(current, chat_id):
            to_return.append(current)

    if len(json_obj):
        return int(json_obj[-1]['update_id']) + 1, to_return
    else:
        return offset, to_return
示例#2
0
文件: lang.py 项目: Maxsior/BotCom
    def execute(self):
        sender = self.msg.sender
        messenger = Messenger.get_instance(sender.messenger)

        if len(self.msg.cmd.args) == 0:
            messenger.send(sender.id,
                           Message('MESSAGE.WRONG_ARGS').localize(sender.lang),
                           keyboards.ConnectKeyboard(sender))
            return

        sender.lang = self.msg.cmd.args[0]
        Storage().update(sender.key, {'lang': sender.lang})
        messenger.send(sender.id,
                       Message('MESSAGE.LANG_CHANGED').localize(sender.lang),
                       keyboards.ConnectKeyboard(sender))
示例#3
0
def messages():
    if not session.get("logged_in"):
        return login()

    conversation = Conversation.get_by_id(int(request.form["conversation"]))
    conversation.put()
    recipient = conversation.user1
    if session["user_id"] == recipient:
        recipient = conversation.user2
    print "popopo"
    notification = Notification(user=conversation.user1,
                                body="New Message",
                                ntype="new-message",
                                item=conversation.item,
                                item_category="",
                                noticed=False,
                                link="/view_conversations/" +
                                str(conversation.key.id()))
    notification.put()
    print "pop-" + notification.body + "-pop"

    message = Message(sender=session["user_id"],
                      recipient=recipient,
                      body=request.form["message_body"],
                      conversation=conversation.key.id())
    message.put()

    return "success"
示例#4
0
文件: unreg.py 项目: Maxsior/BotCom
    def execute(self):
        sender = self.msg.sender

        for connected in sender.connections:
            Storage().update(connected.key, {'receiver': None})
            messenger_to = Messenger.get_instance(connected.messenger)
            messenger_to.send(
                connected.id,
                Message('MESSAGE.FRIEND_OFF').localize(connected.lang),
                keyboards.StartKeyboard(connected))

        Storage().delete(sender.key)
        messenger = Messenger.get_instance(sender.messenger)
        messenger.send(
            sender.id,
            Message('MESSAGE.BYE').localize(sender.lang,
                                            messenger=sender.messenger),
            keyboards.StartKeyboard(sender))
示例#5
0
文件: off.py 项目: Maxsior/BotCom
 def execute(self):
     sender = self.msg.sender
     messenger_from = Messenger.get_instance(sender.messenger)
     if sender.receiver is not None:
         receiver = Storage().get_user(sender.receiver)
         Storage().update(sender.key, {'receiver': None})
         Storage().update(receiver.key, {'receiver': None})
         messenger_to = Messenger.get_instance(receiver.messenger)
         messenger_to.send(
             receiver.id,
             Message('MESSAGE.FRIEND_OFF').localize(receiver.lang),
             keyboards.ConnectKeyboard(receiver))
         messenger_from.send(sender.id,
                             Message('MESSAGE.OFF').localize(sender.lang),
                             keyboards.ConnectKeyboard(sender))
     else:
         messenger_from.send(
             sender.id,
             Message('MESSAGE.OFF_BLANK').localize(sender.lang),
             keyboards.ConnectKeyboard(sender))
示例#6
0
 def send(self, chat, text, reply_to=None, keyboard=None):
     params = {
         'chat_id': chat.id,
         'text': text,
     }
     if reply_to is not None:
         params.update({'reply_to_message_id': reply_to.message_id})
     if keyboard is not None:
         params.update({'reply_markup': keyboard.as_dict()})
     message = self.request('sendMessage', params=params)
     if message is not None:
         return Message(**message)
示例#7
0
    def execute(self):
        sender = self.msg.sender
        messenger = Messenger.get_instance(sender.messenger)

        if len(self.msg.cmd.args) == 0:
            messenger.send(sender.id,
                           Message('MESSAGE.WRONG_ARGS').localize(sender.lang),
                           keyboards.ConnectKeyboard(sender))
            return

        keyboard = self.msg.cmd.args[0]

        try:
            messenger.send(
                sender.id,
                Message(f'KEYBOARD.{keyboard.upper()}').localize(sender.lang),
                getattr(keyboards, f'{keyboard.capitalize()}Keyboard')(sender))
        except KeyError:
            messenger.send(sender.id,
                           Message('MESSAGE.WRONG_ARGS').localize(sender.lang),
                           keyboards.ConnectKeyboard(sender))
示例#8
0
    def execute(self):
        sender = self.msg.sender
        messenger_from = Messenger.get_instance(sender.messenger)

        if len(self.msg.cmd.args) < 2:
            messenger_from.send(
                sender.id,
                Message('MESSAGE.WRONG_ARGS').localize(sender.lang),
                keyboards.ConnectKeyboard(sender)
            )
            return

        messenger, id_ = self.msg.cmd.args

        receiver = Storage().find_user(messenger, id_)

        if receiver is None:
            messenger_from.send(
                sender.id,
                Message('MESSAGE.INVALID_USER').localize(sender.lang),
                keyboards.ConnectKeyboard(sender)
            )
            return

        Storage().update(sender.key, {'receiver': receiver.key})
        messenger_to = Messenger.get_instance(receiver.messenger)

        if receiver.receiver == sender.key:
            message_to_sender = Message('MESSAGE.CONNECTED').localize(sender.lang, name=receiver.name)
            message_to_receiver = Message('MESSAGE.CONNECTED').localize(receiver.lang, name=sender.name)
        else:
            message_to_sender = Message('MESSAGE.CONN_WAIT').localize(
                sender.lang,
                name=receiver.name,
                messenger=receiver.messenger
            )
            message_to_receiver = Message('MESSAGE.CONN_NOTIFICATION').localize(
                receiver.lang,
                name=sender.name,
                messenger=sender.messenger,
                id=sender.nick or sender.phone or sender.id
             )

        messenger_from.send(
            sender.id,
            message_to_sender,
            keyboards.ConnectKeyboard(sender)
        )
        messenger_to.send(
            receiver.id,
            message_to_receiver,
            keyboards.ConnectKeyboard(receiver)
        )
示例#9
0
    def parse(data):
        if 'message' in data or 'callback_query' in data:
            msg = data.get('message') or data.get('callback_query')
            name = msg['from']['first_name']
            if 'last_name' in msg['from']:
                name += f" {msg['from']['last_name']}"

            user = User(id=msg['from']['id'],
                        name=name,
                        messenger='telegram',
                        nick=msg['from'].get('username'),
                        lang=msg['from'].get('language_code'))

            return Message(sender=user,
                           text=msg.get('text', ''),
                           cmd=Telegram.parse_cmd(msg),
                           attachments=[])
        else:
            return None
示例#10
0
文件: api.py 项目: veritas44/arcanum
    def post(self):
        msg = self.request.body
        self.response.headers['Content-Type'] = 'text/html; charset=utf-8'
        self.response.write('<p>Message posted:</p>\n')
        self.response.write('<p>' + escape(msg) + '</p>\n')

        raw = RawMessage()
        raw.content = base64.standard_b64decode(msg)
        raw.put()
        self.response.write('<p>Saved raw message in datastore.</p>\n')
        
        msg_version = unpack(">I", raw.content[0:4])[0]
        self.response.write('<p>Message version is ' + str(msg_version) + '</p>\n')
        
        if msg_version == 1:
            message = Message()
            #message.raw_key     = raw.key
            message.version     = msg_version
            message.sender      = base64.standard_b64encode(raw.content[4:4+32])
            message.recipient   = base64.standard_b64encode(raw.content[36:36+32])
            #message.iv          = raw.content[68:68+16]
            #message.secretkey   = raw.content[84:84+32]
            #message.content_length = raw.content[116:116+4]
            message.content     = raw.content
            #message.contentType = 'TEXT'
            message.created     = datetime.today()
            msg_key = message.put()
            
            self.response.write('<p>Datastore key: ' + str(msg_key) + '</p>\n')
            self.response.write('<p>Datastore key_urlsafe: ' + str(msg_key.urlsafe()) + '</p>\n')
            self.response.write('<p>Datastore key_integer: ' + str(msg_key.integer_id()) + '</p>\n')
            taskqueue.add(queue_name='notifications', 
                          url='/task/msg', 
                          params={
                              'key':msg_key.urlsafe(),
                              'id':msg_key.integer_id()
                          })
        else:
            self.error(404)
示例#11
0
    def parse(data):
        data_type = data['type']
        if data_type == 'message_new':
            msg = data['object']['message']
            client_info = data['object']['client_info']

            name, nick = Vk._get_info(msg['from_id'])
            user = User(id=msg['from_id'],
                        name=name,
                        messenger='vk',
                        nick=nick,
                        lang=Vk._get_lang(client_info['lang_id']))

            return Message(
                sender=user,
                text=msg['text'],
                cmd=Vk.parse_cmd(msg),
                attachments=[]  # TODO attachments
            )
        elif data_type == 'confirmation' and str(
                data.get('group_id')) == os.getenv('VK_GROUP'):
            abort(Response(os.getenv('VK_CONFIRMATION')))
        else:
            return None
示例#12
0
 def parse(data) -> Message:
     user = User(id=123,
                 nick='nick',
                 name='Name Surname',
                 messenger='discord')
     return Message(sender=user, text=data['text'], attachments=[])
示例#13
0
 def test_msg_header(self):
     self.assertEqual(str(Message(123, 456)), "Message---123---456---",
                      "wrong message header")
示例#14
0
文件: help.py 项目: Maxsior/BotCom
 def execute(self):
     sender = self.msg.sender
     messenger = Messenger.get_instance(sender.messenger)
     messenger.send(sender.id,
                    Message('MESSAGE.FULL_HELP').localize(sender.lang),
                    keyboards.ConnectKeyboard(sender))
示例#15
0
 def __init__(self, msg: Message):
     super().__init__(
         Message(sender=msg.sender,
                 cmd=CommandInfo('chat', [msg.cmd.name, *msg.cmd.args])))
示例#16
0
    def execute(self):
        sender = self.msg.sender

        if sender.registered:
            messenger_from = Messenger.get_instance(sender.messenger)
            messenger_from.send(sender.id, Message('MESSAGE.UNDEFINED_CMD').localize(sender.lang))
示例#17
0
文件: main.py 项目: Maxsior/BotCom
def main(messenger):
    messenger_from = Messenger.get_instance(messenger)

    if messenger_from is None:
        abort(404)
        return

    logger.info('Parsing the message')

    msg: Optional[Message] = messenger_from.parse(request.json)

    if msg is None:
        logger.info('Not new message')
        return 'ok'

    logger.info('Message was parsed successfully')

    if not msg.sender.registered:
        logger.info('Registering user')
        msg.sender.key = Storage().add_user(msg.sender)
        logger.info('Sending welcome message')
        messenger_from.send(
            msg.sender.id,
            Message('MESSAGE.REGISTER').localize(msg.sender.lang),
            keyboards.ConnectKeyboard(msg.sender)
        )

        if msg.cmd is None:
            return 'ok'

    if msg.cmd is not None:
        logger.info('Command detected')
        cmd_class = commands.get_class(msg.cmd.name)
        logger.info('Executing command')
        cmd_class(msg).execute()
        return 'ok'

    if msg.sender.receiver is None:
        logger.info('No receiver')
        messenger_from.send(
            msg.sender.id,
            Message('MESSAGE.NO_RECIPIENT').localize(msg.sender.lang),
            keyboards.ConnectKeyboard(msg.sender)
        )
        return 'ok'

    logger.info('Getting receiver')
    receiver = Storage().get_user(msg.sender.receiver)
    if receiver.receiver != msg.sender.key:
        logger.info('Receiver does not confirm the connection')
        messenger_from.send(
            msg.sender.id,
            Message('MESSAGE.CONN_WAIT').localize(msg.sender.lang,
                                                  name=receiver.name,
                                                  messenger=receiver.messenger),
            keyboards.ConnectKeyboard(msg.sender)
        )
        return 'ok'

    logger.info('Getting receiver messenger instance')
    messenger_to = Messenger.get_instance(receiver.messenger)
    logger.info('Forwarding')
    messenger_to.send(
        receiver.id,
        Message('MESSAGE.TEMPLATE', msg.attachments).localize('', name=msg.sender.name, msg=msg.text),
        keyboards.ConnectKeyboard(receiver)
    )

    return 'ok'