Exemplo n.º 1
0
 def __create_group(self, request: groups_pb2.RequestCreateGroup) -> Group:
     group = self.internal.groups.CreateGroup(request).group
     self.manager.add_out_peer(
         peers_pb2.OutPeer(id=group.id,
                           access_hash=group.access_hash,
                           type=PeerType.PEERTYPE_GROUP))
     return Group.from_api(group)
Exemplo n.º 2
0
    def __adopt_peer(
            self,
            peer: peers_pb2.UserOutPeer or peers_pb2.GroupOutPeer) -> None:
        """Find outpeer for given peer and store it in internal peers_to_outpeers dict.

        :param peer: Peer object (UserOutPeer or GroupOutPeer)
        """
        if isinstance(peer, peers_pb2.UserOutPeer):
            out_peer = peers_pb2.OutPeer(id=peer.uid,
                                         access_hash=peer.access_hash,
                                         type=PeerType.PEERTYPE_PRIVATE)
        elif isinstance(peer, peers_pb2.GroupOutPeer):
            out_peer = peers_pb2.OutPeer(id=peer.group_id,
                                         access_hash=peer.access_hash,
                                         type=PeerType.PEERTYPE_GROUP)
        else:
            raise UnknownPeerError("Unknown PeerType.")
        self.peer_to_out_peer[(out_peer.type, out_peer.id)] = out_peer
Exemplo n.º 3
0
    def adopt_peer(self, peer):
        """Finds outpeer for given peer and store it in internal peers_to_outpeers dict.

        :param peer: Peer object
        """
        if isinstance(peer, peers_pb2.UserOutPeer):
            outpeer = peers_pb2.OutPeer(type=peers_pb2.PEERTYPE_PRIVATE,
                                        id=peer.uid,
                                        access_hash=peer.access_hash)
            self.peers_to_outpeers[peer_hasher(private_peer(
                peer.uid))] = outpeer
        elif isinstance(peer, peers_pb2.GroupOutPeer):
            outpeer = peers_pb2.OutPeer(type=peers_pb2.PEERTYPE_GROUP,
                                        id=peer.group_id,
                                        access_hash=peer.access_hash)
            self.peers_to_outpeers[peer_hasher(group_peer(
                peer.group_id))] = outpeer
        else:
            raise RuntimeError("Unknown peer type")
Exemplo n.º 4
0
    def find_user_outpeer_by_nick(self, nick):
        users = self.contacts.SearchContacts(
            contacts_pb2.RequestSearchContacts(request=nick)).users

        for user in users:
            if user.data.nick.value == nick:
                outpeer = peers_pb2.OutPeer(type=peers_pb2.PEERTYPE_PRIVATE,
                                            id=int(user.id),
                                            access_hash=int(user.access_hash))
                return outpeer
        return None
 def test_find_group_by_id(self):
     group = bot.groups.find_group_by_id(1)
     self.assertTrue(isinstance(group, AsyncTask))
     self.assertIsNone(group.wait())
     bot.manager.add_out_peer(
         peers_pb2.OutPeer(id=1,
                           access_hash=1,
                           type=PeerType.PEERTYPE_GROUP))
     group = bot.groups.find_group_by_id(1)
     self.assertTrue(isinstance(group, AsyncTask))
     self.assertTrue(isinstance(group.wait(), Group))
Exemplo n.º 6
0
    def join_group(self, token_or_url: str) -> Group:
        """join to group by token or invite url (used for private groups)

        :param token_or_url: group's token or invite url
        :return: Group
        """
        request = groups_pb2.RequestJoinGroup(token=token_or_url)
        response = self.internal.groups.JoinGroup(request)
        self.manager.add_out_peer(
            peers_pb2.OutPeer(id=response.group.id,
                              access_hash=response.group.access_hash,
                              type=PeerType.PEERTYPE_GROUP))
        return Group.from_api(response.group)
Exemplo n.º 7
0
 def get_group(self, group):
     peer = peers_pb2.OutPeer(id=group.id,
                              type=peers_pb2.PEERTYPE_GROUP,
                              access_hash=group.access_hash)
     users = self.get_user_ids_in_group(peer)
     if self.bot.user_info.user.id not in users:
         return
     invite_url = self.bot.internal.groups.GetGroupInviteUrl(
         groups_pb2.RequestGetGroupInviteUrl(
             group_peer=peers_pb2.GroupOutPeer(
                 group_id=group.id, access_hash=group.access_hash))).url
     return Group(peer, users, group.data.title, group.data.shortname.value,
                  invite_url)
Exemplo n.º 8
0
    def get_user_outpeer_by_id(self, uid):
        req = messaging_pb2.RequestLoadDialogs(
            min_date=0,
            limit=1,
            peers_to_load=[
                peers_pb2.Peer(type=peers_pb2.PEERTYPE_PRIVATE, id=uid)
            ])
        result = self.internal.messaging.LoadDialogs(req)

        for outpeer in result.user_peers:
            if outpeer.uid == uid:
                return peers_pb2.OutPeer(type=peers_pb2.PEERTYPE_PRIVATE,
                                         id=outpeer.uid,
                                         access_hash=outpeer.access_hash)
Exemplo n.º 9
0
    def find_group_by_id(self, group_id: int) -> Group or None:
        """Find and return Group by id

        :param group_id: group's
        :return: Group or None if could not find
        """
        out_peer = self.__get_out_peer(Peer(group_id, PeerType.PEERTYPE_GROUP))
        if out_peer is None:
            return None

        request = sequence_and_updates_pb2.RequestGetReferencedEntitites(
            groups=[out_peer])
        result = self.internal.updates.GetReferencedEntitites(request).groups
        self.manager.add_out_peer(
            peers_pb2.OutPeer(id=result[0].id,
                              type=PeerType.PEERTYPE_GROUP,
                              access_hash=result[0].access_hash))
        return Group.from_api(result[0])
class TestUsers(unittest.TestCase):
    out_peer = peers_pb2.OutPeer(
        type=peers_pb2.PEERTYPE_PRIVATE,
        id=0,
        access_hash=0
    )
    bot.internal.search = Search()
    bot.internal.updates = Updates()
    bot.internal.messaging = Messaging()
    bot.internal.users = Users()

    def test_get_user_by_nick(self):
        user = bot.users.get_user_by_nick("name")
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertIsNone(user.wait())
        user = bot.users.get_user_by_nick("nick")
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertTrue(isinstance(user.wait(), User))

    def test_get_user_by_id(self):
        user = bot.users.get_user_by_id(0)
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertIsNone(user.wait())
        user = bot.users.get_user_by_id(1)
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertTrue(isinstance(user.wait(), User))

    def test_search_users_by_nick_substring(self):
        user = bot.users.search_users_by_nick_substring("name")
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertEqual(user.wait(), [])
        user = bot.users.search_users_by_nick_substring("nick")
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertTrue(isinstance(user.wait()[0], User))

    def test_get_full_profile_by_nick(self):
        user = bot.users.get_full_profile_by_nick("nick")
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertTrue(isinstance(user.wait(), FullUser))

    def test_get_full_profile_by_id(self):
        user = bot.users.get_full_profile_by_id(0)
        self.assertTrue(isinstance(user, AsyncTask))
        self.assertIsNone(user.wait())
Exemplo n.º 11
0
class TestMessaging(unittest.TestCase):
    bot.internal.messaging = Messaging()
    bot.internal.updates = Updates()
    bot.internal.media_and_files = MediaAndFiles()

    test_file = "../dialog_bot_sdk/examples/files/example.png"

    peer = Peer(1, PEERTYPE_PRIVATE)
    message = Message(UUID(1, 1), UUID(0, 0), peer, None, [], [], 0, 0)
    outpeer = peers_pb2.OutPeer(type=PEERTYPE_PRIVATE, id=0, access_hash=0)
    mid = definitions_pb2.UUIDValue(msb=0, lsb=0)
    msg_content = messaging_pb2.MessageContent()
    msg_content.textMessage.text = "Hello"
    interactive_media = [
        InteractiveMediaGroup([
            InteractiveMedia("1", InteractiveMediaButton("Yes", "Да")),
            InteractiveMedia("2", InteractiveMediaButton("No", "Нет")),
        ])
    ]

    # msg_content_with_group = copy.deepcopy(msg_content)
    # group[0].render(msg_content_with_group.textMessage.media.add())
    # doc_msg = messaging_pb2.DocumentMessage(
    #     file_id=0,
    #     access_hash=0,
    #     file_size=60,
    #     name=""
    # )

    def test_send_message(self):
        send = bot.messaging.send_message(self.peer, "text",
                                          self.interactive_media)
        self.assertTrue(isinstance(send, AsyncTask))
        self.assertTrue(isinstance(send.wait(), UUID))

    def test_update_message(self):
        update = bot.messaging.update_message(self.message, "text",
                                              self.interactive_media)
        self.assertTrue(isinstance(update, AsyncTask))
        self.assertIsNone(update.wait())

    def test_delete_message(self):
        delete = bot.messaging.delete(self.message)
        self.assertTrue(isinstance(delete, AsyncTask))
        self.assertIsNone(delete.wait())

    def test_get_messages_by_id(self):
        msg = bot.messaging.get_messages_by_id([UUID(1, 1)])
        self.assertTrue(isinstance(msg, AsyncTask))
        self.assertTrue(isinstance(msg.wait()[0], Message))

    def test_messages_read(self):
        read = bot.messaging.messages_read(self.peer, 0)
        self.assertTrue(isinstance(read, AsyncTask))
        self.assertIsNone(read.wait())

    @patch('requests.put')
    def test_send_file(self, put):
        put.return_value = Put(200)
        send = bot.messaging.send_file(self.peer, self.test_file)
        self.assertTrue(isinstance(send, AsyncTask))
        self.assertTrue(isinstance(send.wait(), UUID))
        put.return_value = Put(400)
        send = bot.messaging.send_file(self.peer, self.test_file)
        self.assertTrue(isinstance(send, AsyncTask))
        self.assertIsNone(send.wait())

    @patch('requests.put')
    def test_send_media(self, put):
        put.return_value = Put(200)
        image = bot.internal.uploading.upload_file(self.test_file).wait()
        media = MessageMedia(image=ImageMedia(ImageLocation(image)))
        send = bot.messaging.send_media(self.peer, [media])
        self.assertTrue(isinstance(send, AsyncTask))
        self.assertTrue(isinstance(send.wait(), UUID))

    @patch('requests.put')
    def test_send_image(self, put):
        put.return_value = Put(200)
        send = bot.messaging.send_image(self.peer, self.test_file)
        self.assertTrue(isinstance(send, AsyncTask))
        self.assertTrue(isinstance(send.wait(), UUID))
        put.return_value = Put(400)
        send = bot.messaging.send_image(self.peer, self.test_file)
        self.assertTrue(isinstance(send, AsyncTask))
        self.assertIsNone(send.wait())

    def test_reply(self):
        reply = bot.messaging.reply(self.peer, [UUID(1, 1)], None,
                                    self.interactive_media)
        self.assertTrue(isinstance(reply, AsyncTask))
        self.assertTrue(isinstance(reply.wait(), UUID))

    def test_forward(self):
        forward = bot.messaging.forward(self.peer, [UUID(1, 1)], None,
                                        self.interactive_media)
        self.assertTrue(isinstance(forward, AsyncTask))
        self.assertTrue(isinstance(forward.wait(), UUID))

    def test_load_message_history(self):
        history = bot.messaging.load_message_history(
            self.peer, 0, ListLoadMode.LISTLOADMODE_BACKWARD, 1)
        self.assertTrue(isinstance(history, AsyncTask))
        self.assertTrue(isinstance(history.wait()[0], Message))