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)
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
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")
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))
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)
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)
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)
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())
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))