Esempio n. 1
0
class LINE:

  mid = None
  authToken = None
  cert = None
  channel_access_token = None
  token = None
  obs_token = None
  refresh_token = None


  def __init__(self):
    self.Talk = Talk()
    self._session = requests.session()
    self.headers = Talk.Headers
    self.Talk.set_Headers('User-Agent', Talk.UA)
    self.Talk.set_Headers('X-Line-Application', Talk.LA)
    self.Talk.set_Headers('X-Line-Access',self.authToken)

  def login(self, mail=None, passwd=None, cert=None, token=None, qr=False, callback=None):
    if callback is None:
      callback = def_callback
    resp = self.__validate(mail,passwd,cert,token,qr)
    if resp == 1:
      self.Talk.login(mail, passwd, callback=callback)
    elif resp == 2:
      self.Talk.login(mail,passwd,cert, callback=callback)
    elif resp == 3:
      self.Talk.TokenLogin(token)
    elif resp == 4:
      self.Talk.qrLogin(callback)
    else:
      raise Exception("invalid arguments")

    self.authToken = self.Talk.authToken
    self.cert = self.Talk.cert
    self._headers = {
              'X-Line-Application' : 'CHROMEOS 1.4.17 Chrome_OS 1',
              'X-Line-Access' : 'Eoy9olRQDLxhsfxOg2O3.juggmkkvlw6zSUXT/gRP0W.LzcEOstPR7llI5GUY7gxOj3K3b4AxXmIXoWYB9472LA=',
              'User-Agent' : 'Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36 (KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36'
   }
    self.Poll = Poll(self.authToken)
    #self.channel = channel.Channel(self.authToken)
    #self.channel.login()	
    #self.mid = self.channel.mid
    #self.channel_access_token = self.channel.channel_access_token
    #self.token = self.channel.token
    #self.obs_token = self.channel.obs_token
    #self.refresh_token = self.channel.refresh_token


  """User"""

  def getProfile(self):
    return self.Talk.client.getProfile()

  def getSettings(self):
    return self.Talk.client.getSettings()

  def getUserTicket(self):
    return self.Talk.client.getUserTicket()

  def updateProfile(self, profileObject):
    return self.Talk.client.updateProfile(0, profileObject)

  def updateSettings(self, settingObject):
    return self.Talk.client.updateSettings(0, settingObject)

  def CloneContactProfile(self, mid):
    contact = self.getContact(mid)
    profile = self.getProfile()
    profile.displayName = contact.displayName
    profile.statusMessage = contact.statusMessage
    profile.pictureStatus = contact.pictureStatus
    self.updateDisplayPicture(profile.pictureStatus)
    return self.updateProfile(profile)

  def updateDisplayPicture(self, hash_id):
    return self.Talk.client.updateProfileAttribute(0, 8, hash_id)

  def updateProfilePicture(self, path):
        file=open(path, 'rb')
        files = {
            'file': file
        }
        params = {
            'name': 'media',
            'type': 'image',
            'oid': self.profile.mid,
            'ver': '1.0',
        }
        data={
            'params': json.dumps(params)
        }
        r = self.server.postContent(self.server.LINE_OBS_DOMAIN + '/talk/p/upload.nhn', data=data, files=files)
        if r.status_code != 201:
            raise Exception('Update profile picture failure.')
        return True

  """Operation"""

  def fetchOperation(self, revision, count):
        return self.Poll.client.fetchOperations(revision, count)

  def fetchOps(self, rev, count):
        return self.Poll.client.fetchOps(rev, count, 0, 0)

  def getLastOpRevision(self):
        return self.Talk.client.getLastOpRevision()

  def stream(self):
        return self.Poll.stream()

  """Message"""

  def sendMessage(self, messageObject):
        return self.Talk.client.sendMessage(0,messageObject)

  def removeAllMessage(self, messageObject):
        return self.Talk.client.removeAllMessage(0,lastMessageId)

  def sendText(self, Tomid, text):
        msg = Message()
        msg.to = Tomid
        msg.text = text

        return self.Talk.client.sendMessage(0, msg)
  def post_content(self, url, data=None, files=None):
        return self._session.post(url, headers=self._headers, data=data, files=files)

  def sendImage(self, to_, path):
        M = Message(to=to_, text=None, contentType = 1)
        M.contentMetadata = None
        M.contentPreview = None
        M_id = self.Talk.client.sendMessage(0,M).id
        files = {
            'file': open(path, 'rb'),
        }
        params = {
            'name': 'media',
            'oid': M_id,
            'size': len(open(path, 'rb').read()),
            'type': 'image',
            'ver': '1.0',
        }
        data = {
            'params': json.dumps(params)            
        }       

        r = self.post_content('https://os.line.naver.jp/talk/m/upload.nhn', data=data, files=files)
        #print r
        if r.status_code != 201:
            raise Exception('Upload image failure.')
        return True

  def sendImageWithURL(self, to_, url):
        """Send a image with given image url

        :param url: image url to send
        """
        path = '%s/pythonLine-%1.data' % (tempfile.gettempdir(), randint(0, 9))


        r = requests.get(url, stream=True)
        if r.status_code == 200:
            with open(path, 'w') as f:
                shutil.copyfileobj(r.raw, f)
        else:
            raise Exception('Download image failure.')

        try:
            self.sendImage(to_, path)
        except Exception as e:
            raise e

  def sendVideo(self, to_, path):
        M = Message(to=to_, text=None, contentType = 2)
        M.contentMetadata = None
        M.contentPreview = None
        M2 = self.Talk.client.sendMessage(0,M)
        M_id = M2.id
        files = {
            'file': open(path, 'rb'),
        }
        params = {
            'name': 'media',
            'oid': M_id,
            'size': len(open(path, 'rb').read()),
            'type': 'video',
            'ver': '1.0',
        }
        data = {
            'params': json.dumps(params)
        }
        r = self.post_content('https://os.line.naver.jp/talk/m/upload.nhn', data=data, files=files)
        #print r
        if r.status_code != 201:
            raise Exception('Upload video failure.')
        return True

  def sendVideoWithURL(self, to_, url):
        path = '%s/pythonLine-%i.data' % (tempfile.gettempdir(), randint(0, 9))

        r = requests.get(url, stream=True)
        if r.status_code == 200:
            with open(path, 'w') as f:
                shutil.copyfileobj(r.raw, f)
        else:
            raise Exception('Download video failure.')

        try:
            self.sendVideo(to_, path)
        except Exception as e:
            raise (e)

  def sendAudio(self, to_, path):
        M = Message(to=to_, text=None, contentType = 3)
        M.contentMetadata = None
        M.contentPreview = None
        M2 = self.Talk.client.sendMessage(0,M)
        M_id = M2.id
        files = {
            'file': open(path, 'rb'),
        }
        params = {
            'name': 'media',
            'oid': M_id,
            'size': len(open(path, 'rb').read()),
            'type': 'audio',
            'ver': '1.0',
        }
        data = {
            'params': json.dumps(params)
        }
        r = self.post_content('https://os.line.naver.jp/talk/m/upload.nhn', data=data, files=files)
        if r.status_code != 201:
            raise Exception('Upload audio failure.')
        return True

  def sendAudioWithURL(self, to_, url):
        path = '%s/pythonLine-%1.data' % (tempfile.gettempdir(), randint(0, 9))

        r = requests.get(url, stream=True)
        if r.status_code == 200:
            with open(path, 'w') as f:
                shutil.copyfileobj(r.raw, f)
        else:
            raise Exception('Download audio failure.')

        try:
            self.sendAudio(to_, path)
        except Exception as e:
            raise (e)

  def removeAllMessages(self, lastMessageId):
	return self.Talk.client.removeAllMessages(0, lastMessageId)

  def sendEvent(self, messageObject):
        return self._client.sendEvent(0, messageObject)

  def sendChatChecked(self, mid, lastMessageId):
        return self.Talk.client.sendChatChecked(0, mid, lastMessageId)

  def getMessageBoxCompactWrapUp(self, mid):
        return self.Talk.client.getMessageBoxCompactWrapUp(mid)

  def getMessageBoxCompactWrapUpList(self, start, messageBox):
        return self.Talk.client.getMessageBoxCompactWrapUpList(start, messageBox)

  def getRecentMessages(self, messageBox, count):
        return self.Talk.client.getRecentMessages(messageBox.id, count)

  def getMessageBox(self, channelId, messageboxId, lastMessagesCount):
        return self.Talk.client.getMessageBox(channelId, messageboxId, lastMessagesCount)

  def getMessageBoxList(self, channelId, lastMessagesCount):
        return self.Talk.client.getMessageBoxList(channelId, lastMessagesCount)

  def getMessageBoxListByStatus(self, channelId, lastMessagesCount, status):
        return self.Talk.client.getMessageBoxListByStatus(channelId, lastMessagesCount, status)

  def getMessageBoxWrapUp(self, mid):
        return self.Talk.client.getMessageBoxWrapUp(mid)

  def getMessageBoxWrapUpList(self, start, messageBoxCount):
        return self.Talk.client.getMessageBoxWrapUpList(start, messageBoxCount)

  """Contact"""


  def blockContact(self, mid):
        return self.Talk.client.blockContact(0, mid)


  def unblockContact(self, mid):
        return self.Talk.client.unblockContact(0, mid)


  def findAndAddContactsByMid(self, mid):
        return self.Talk.client.findAndAddContactsByMid(0, mid)


  def findAndAddContactsByMids(self, midlist):
        for i in midlist:
            self.Talk.client.findAndAddContactsByMid(0, i)

  def findAndAddContactsByUserid(self, userid):
        return self.Talk.client.findAndAddContactsByUserid(0, userid)

  def findContactsByUserid(self, userid):
        return self.Talk.client.findContactByUserid(userid)

  def findContactByTicket(self, ticketId):
        return self.Talk.client.findContactByUserTicket(ticketId)

  def getAllContactIds(self):
        return self.Talk.client.getAllContactIds()

  def getBlockedContactIds(self):
        return self.Talk.client.getBlockedContactIds()

  def getContact(self, mid):
        return self.Talk.client.getContact(mid)

  def getContacts(self, midlist):
        return self.Talk.client.getContacts(midlist)

  def getFavoriteMids(self):
        return self.Talk.client.getFavoriteMids()

  def getHiddenContactMids(self):
        return self.Talk.client.getHiddenContactMids()


  """Group"""

  def findGroupByTicket(self, ticketId):
        return self.Talk.client.findGroupByTicket(ticketId)

  def acceptGroupInvitation(self, groupId):
        return self.Talk.client.acceptGroupInvitation(0, groupId)

  def acceptGroupInvitationByTicket(self, groupId, ticketId):
        return self.Talk.client.acceptGroupInvitationByTicket(0, groupId, ticketId)

  def cancelGroupInvitation(self, groupId, contactIds):
        return self.Talk.client.cancelGroupInvitation(0, groupId, contactIds)

  def createGroup(self, name, midlist):
        return self.Talk.client.createGroup(0, name, midlist)

  def getGroup(self, groupId):
        return self.Talk.client.getGroup(groupId)

  def getGroups(self, groupIds):
        return self.Talk.client.getGroups(groupIds)

  def getGroupIdsInvited(self):
        return self.Talk.client.getGroupIdsInvited()

  def getGroupIdsJoined(self):
        return self.Talk.client.getGroupIdsJoined()

  def inviteIntoGroup(self, groupId, midlist):
        return self.Talk.client.inviteIntoGroup(0, groupId, midlist)

  def kickoutFromGroup(self, groupId, midlist):
        return self.Talk.client.kickoutFromGroup(0, groupId, midlist)

  def leaveGroup(self, groupId):
        return self.Talk.client.leaveGroup(0, groupId)

  def rejectGroupInvitation(self, groupId):
        return self.Talk.client.rejectGroupInvitation(0, groupId)

  def reissueGroupTicket(self, groupId):
        return self.Talk.client.reissueGroupTicket(groupId)

  def updateGroup(self, groupObject):
        return self.Talk.client.updateGroup(0, groupObject)
  def findGroupByTicket(self,ticketId):
        return self.Talk.client.findGroupByTicket(0,ticketId)

  """Room"""

  def createRoom(self, midlist):
    return self.Talk.client.createRoom(0, midlist)

  def getRoom(self, roomId):
    return self.Talk.client.getRoom(roomId)

  def inviteIntoRoom(self, roomId, midlist):
    return self.Talk.client.inviteIntoRoom(0, roomId, midlist)

  def leaveRoom(self, roomId):
    return self.Talk.client.leaveRoom(0, roomId)

  """TIMELINE"""

  def new_post(self, text):
    return self.channel.new_post(text)

  def like(self, mid, postid, likeType=1001):
    return self.channel.like(mid, postid, likeType)

  def comment(self, mid, postid, text):
    return self.channel.comment(mid, postid, text)

  def activity(self, limit=20):
    return self.channel.activity(limit)

  def getAlbum(self, gid):

      return self.channel.getAlbum(gid)
  def changeAlbumName(self, gid, name, albumId):
      return self.channel.changeAlbumName(gid, name, albumId)

  def deleteAlbum(self, gid, albumId):
      return self.channel.deleteAlbum(gid,albumId)

  def getNote(self,gid, commentLimit, likeLimit):
      return self.channel.getNote(gid, commentLimit, likeLimit)

  def getDetail(self,mid):
      return self.channel.getDetail(mid)

  def getHome(self,mid):
      return self.channel.getHome(mid)

  def createAlbum(self, gid, name):
      return self.channel.createAlbum(gid,name)

  def createAlbum2(self, gid, name, path):
      return self.channel.createAlbum(gid, name, path, oid)


  def __validate(self, mail, passwd, cert, token, qr):
    if mail is not None and passwd is not None and cert is None:
      return 1
    elif mail is not None and passwd is not None and cert is not None:
      return 2
    elif token is not None:
      return 3
    elif qr is True:
      return 4
    else:
      return 5

  def loginResult(self, callback=None):
    if callback is None:
      callback = def_callback

      prof = self.getProfile()

      print("One Piece BOT")
      print("mid -> " + prof.mid)
      print("Nama -> " + prof.displayName)
      print("Token -> " + self.authToken)
      print("cert -> " + self.cert if self.cert is not None else "")
Esempio n. 2
0
class LINE:

    mid = None
    authToken = None
    cert = None
    channel_access_token = None
    token = None
    obs_token = None
    refresh_token = None

    def __init__(self):
        self.Talk = Talk()
        self._session = requests.session()
        self.headers = Talk.Headers
        self.Talk.set_Headers('User-Agent', Talk.UA)
        self.Talk.set_Headers('X-Line-Application', Talk.LA)
        self.Talk.set_Headers('X-Line-Access', self.authToken)

    def login(self,
              mail=None,
              passwd=None,
              cert=None,
              token=None,
              qr=False,
              callback=None):
        if callback is None:
            callback = def_callback
        resp = self.__validate(mail, passwd, cert, token, qr)
        if resp == 1:
            self.Talk.login(mail, passwd, callback=callback)
        elif resp == 2:
            self.Talk.login(mail, passwd, cert, callback=callback)
        elif resp == 3:
            self.Talk.TokenLogin(token)
        elif resp == 4:
            self.Talk.qrLogin(callback)
        else:
            raise Exception("invalid arguments")

        self.authToken = self.Talk.authToken
        self.cert = self.Talk.cert
        self._headers = {
            'X-Line-Application':
            'CHROMEOS 1.4.17 Chrome_OS 1',
            'X-Line-Access':
            'EnqjZDxSQl7i2XELddyd.NuMlRurpLHL+gcbv0NPZpq.kwUHvDxMcbNbRLnTlPwZpCJqPlOVL0bKKXIZpwPDOuY=',
            'User-Agent':
            'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'
        }

        self.Poll = Poll(self.authToken)
        #self.channel = channel.Channel(self.authToken)

    # self.channel.login()

    #self.mid = self.channel.mid
    #self.channel_access_token = self.channel.channel_access_token
    # self.token = self.channel.token
    # self.obs_token = self.channel.obs_token
    # self.refresh_token = self.channel.refresh_token
    """User"""

    def getProfile(self):
        return self.Talk.client.getProfile()

    def getSettings(self):
        return self.Talk.client.getSettings()

    def getUserTicket(self):
        return self.Talk.client.getUserTicket()

    def updateProfile(self, profileObject):
        return self.Talk.client.updateProfile(0, profileObject)

    def updateSettings(self, settingObject):
        return self.Talk.client.updateSettings(0, settingObject)

    def updateProfilePicture(self, mid):
        return self.Talk.client.updateProfileAttribute(0, 8, mid)

    def cloneContactProfile(self, mid):
        contact = self.getContact(mid)
        profile = self.getProfile()
        profile.displayName = contact.displayName
        profile.statusMessage = contact.statusMessage
        profile.pictureStatus = contact.pictureStatus
        self.updateDisplayPicture(profile.pictureStatus)
        return self.updateProfile(profile)

    """Operation"""

    def fetchOperation(self, revision, count):
        return self.Poll.client.fetchOperations(revision, count)

    def fetchOps(self, rev, count):
        return self.Poll.client.fetchOps(rev, count, 0, 0)

    def getLastOpRevision(self):
        return self.Talk.client.getLastOpRevision()

    def stream(self):
        return self.Poll.stream()

    """Message"""

    def sendMessage(self, messageObject):
        return self.Talk.client.sendMessage(0, messageObject)

    def sendText(self, Tomid, text):
        msg = Message()
        msg.to = Tomid
        msg.text = text

        return self.Talk.client.sendMessage(0, msg)

    def post_content(self, url, data=None, files=None):
        return self._session.post(url,
                                  headers=self.headers,
                                  data=data,
                                  files=files)

    def sendImage(self, to_, path):
        M = Message(to=to_, text=None, contentType=1)
        M.contentMetadata = None
        M.contentPreview = None
        M2 = self.Talk.client.sendMessage(0, M)
        M_id = M2.id
        files = {
            'file': open(path, 'rb'),
        }
        params = {
            'name': 'media',
            'oid': M_id,
            'size': len(open(path, 'rb').read()),
            'type': 'image',
            'ver': '1.0',
        }
        data = {'params': json.dumps(params)}
        r = self.post_content('https://os.line.naver.jp/talk/m/upload.nhn',
                              data=data,
                              files=files)
        if r.status_code != 201:
            raise Exception('Upload image failure.')
        #r.content
        return True

    def sendImageWithURL(self, to_, url):
        path = '%s/pythonLine-%i.data' % (tempfile.gettempdir(),
                                          random.randint(0, 9))

        r = requests.get(url, stream=True)
        if r.status_code == 200:
            with open(path, 'w') as f:
                shutil.copyfileobj(r.raw, f)
        else:
            raise Exception('Download image failure.')
        try:
            self.sendImage(to_, path)
        except Exception as e:
            raise e

    def SendMessageWithMention(self, to_, text, data=[]):
        arr = []
        if '[list]' in text.lower():
            list_text = '\n@'
            list_text = list_text.join(str(l[1]) for i in data)
            text = text.replace('[list]', list_text)
        elif '@' in text:
            text = text
        else:
            list_text = ' @'
            list_text += list_text.join(str(l[1]) for i in data)
            text = text + list_text
        for l in data:
            mid = 1 [0]
            name = '@%s' % l[1]
            ln_text = text.replace('\n', ' ')
            length_n = len(name)
            if ln_text.find(name):
                line_s = ln_text.index(name)
                line_e = (int(line_s) + int(length_n))
            arrData = {'S': str(line_s), 'E': str(line_e), 'M': mid}
            arr.append(arrData)
        contentMetadata = {
            'MENTION':
            str('{"MENTIONEES":' + json.dumps(arr).replace(' ', '') + '}')
        }
        return self.sendMessage(to, text, contentMetadata)

    def sendAudioWithURL(self, to_, url):
        path = '/pythonLine.data'
        r = requests.get(url, stream=True)
        if r.status_code == 200:
            with open(path, 'w') as f:
                shutil.copyfileobj(r.raw, f)
        else:
            raise Exception('Download Audio failure.')
        try:
            self.sendAudio(to_, path)
        except Exception as e:
            raise e

    def sendAudio(self, to_, path):
        M = Message(to=to_, contentType=3)
        M.contentMetadata = None
        M.contentPreview = None
        M_id = self.Talk.client.sendMessage(0, M).id
        files = {
            'file': open(path, 'rb'),
        }
        params = {
            'name': 'media',
            'oid': M_id,
            'size': len(open(path, 'rb').read()),
            'type': 'audio',
            'ver': '1.0',
        }
        data = {'params': json.dumps(params)}
        r = self.post_content('https://os.line.naver.jp/talk/m/upload.nhn',
                              data=data,
                              files=files)
        if r.status_code != 201:
            raise Exception('Upload image failure.')
        return True

    def sendVideo(self, to_, path):
        M = Message(to=to_, contentType=2)
        M.contentMetadata = {'VIDLEN': '0', 'DURATION': '0'}
        M.contentPreview = None
        M_id = self.Talk.client.sendMessage(0, M).id
        files = {
            'file': open(path, 'rb'),
        }
        params = {
            'name': 'media',
            'oid': M_id,
            'size': len(open(path, 'rb').read()),
            'type': 'video',
            'ver': '1.0',
        }
        data = {'params': json.dumps(params)}
        r = self.post_content('https://os.line.naver.jp/talk/m/upload.nhn',
                              data=data,
                              files=files)
        if r.status_code != 201:
            raise Exception('Upload image failure.')
        return True

    def sendVideoWithURL(self, to_, url):
        path = '/pythonLine.data'
        r = requests.get(url, stream=True)
        if r.status_code == 200:
            with open(path, 'w') as f:
                shutil.copyfileobj(r.raw, f)
        else:
            raise Exception('Download Audio failure.')
        try:
            self.sendVideo(to_, path)
        except Exception as e:
            raise e


#  def sendGif(self, to_, path):
#     M = Message(to=to_,contentType = 1)
#    M.contentMetadata = {
#        'VIDLEN' : '0',
#       'DURATION' : '0'
#  }
#      M.contentPreview = None
#     M_id = self.Talk.client.sendMessage(0,M).id
#    files = {
#      'file': open(path, 'rb'),
#  }
#      params = {
#        'name': 'media',
#       'oid': M_id,
#      'size': len(open(path, 'rb').read()),
#     'type': 'image',
#    'ver': '1.0',
#}
#      data = {
#        'params': json.dumps(params)
#    }
#   r = self.post_content('https://os.line.naver.jp/talk/m/upload.nhn', data=data, files=files)
#  if r.status_code != 201:
#    raise Exception('Upload Gif failure.')
#return True
#  def sendGifWithURL(self, to_, url):
#     path = '/pythonLine.data'
#    r = requests.get(url, stream=True)
#   if r.status_code == 200:
#     with open(path, 'w') as f:
#       shutil.copyfileobj(r.raw, f)
#else:
#  raise Exception('Download Gif failure.')
#      try:
#        self.sendGif(to_, path)
#    except Exception as e:
#      raise e

    def download_page(url):
        version = (3, 0)
        cur_version = sys.version_info
        if cur_version >= version:  #If the Current Version of Python is 3.0 or above
            import urllib.request  #urllib library for Extracting web pages
            try:
                headers = {}
                headers[
                    'User-Agent'] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
                req = urllib.request.Request(url, headers=headers)
                resp = urllib.request.urlopen(req)
                respData = str(resp.read())
                return respData
            except Exception as e:
                print(str(e))
        else:  #If the Current Version of Python is 2.x
            import urllib2
            try:
                headers = {}
                headers[
                    'User-Agent'] = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17"
                req = urllib2.Request(url, headers=headers)
                response = urllib2.urlopen(req)
                page = response.read()
                return page
            except:
                return "Page Not found"

    #Finding 'Next Image' from the given raw page
    def _images_get_next_item(s):
        start_line = s.find('rg_di')
        if start_line == -1:  #If no links are found then give an error!
            end_quote = 0
            link = "no_links"
            return link, end_quote
        else:
            start_line = s.find('"class="rg_meta"')
            start_content = s.find('"ou"', start_line + 70)
            end_content = s.find(',"ow"', start_content - 70)
            content_raw = str(s[start_content + 6:end_content - 1])
            return content_raw, end_content

    #Getting all links with the help of '_images_get_next_image'
    def _images_get_all_items(page):
        items = []
        while True:
            item, end_content = _images_get_next_item(page)
            if item == "no_links":
                break
            else:
                items.append(
                    item)  #Append all the links in the list named 'Links'
                page = page[end_content:]
        return items

    def sendEvent(self, messageObject):
        return self._client.sendEvent(0, messageObject)

    def sendChatChecked(self, mid, lastMessageId):
        return self.Talk.client.sendChatChecked(0, mid, lastMessageId)

    def getMessageBoxCompactWrapUp(self, mid):
        return self.Talk.client.getMessageBoxCompactWrapUp(mid)

    def getMessageBoxCompactWrapUpList(self, start, messageBox):
        return self.Talk.client.getMessageBoxCompactWrapUpList(
            start, messageBox)

    def getRecentMessages(self, messageBox, count):
        return self.Talk.client.getRecentMessages(messageBox.id, count)

    def getMessageBox(self, channelId, messageboxId, lastMessagesCount):
        return self.Talk.client.getMessageBox(channelId, messageboxId,
                                              lastMessagesCount)

    def getMessageBoxList(self, channelId, lastMessagesCount):
        return self.Talk.client.getMessageBoxList(channelId, lastMessagesCount)

    def getMessageBoxListByStatus(self, channelId, lastMessagesCount, status):
        return self.Talk.client.getMessageBoxListByStatus(
            channelId, lastMessagesCount, status)

    def getMessageBoxWrapUp(self, mid):
        return self.Talk.client.getMessageBoxWrapUp(mid)

    def getMessageBoxWrapUpList(self, start, messageBoxCount):
        return self.Talk.client.getMessageBoxWrapUpList(start, messageBoxCount)

    def removeAllMessages(self, lastMessageId):
        return self.Talk.client.removeAllMessages(0, lastMessageId)

    """Contact"""

    def blockContact(self, mid):
        return self.Talk.client.blockContact(0, mid)

    def unblockContact(self, mid):
        return self.Talk.client.unblockContact(0, mid)

    def findAndAddContactsByMid(self, mid):
        return self.Talk.client.findAndAddContactsByMid(0, mid)

    def findAndAddContactsByMids(self, midlist):
        for i in midlist:
            self.Talk.client.findAndAddContactsByMid(0, i)

    def findAndAddContactsByUserid(self, userid):
        return self.Talk.client.findAndAddContactsByUserid(0, userid)

    def findContactsByUserid(self, userid):
        return self.Talk.client.findContactByUserid(userid)

    def findContactByTicket(self, ticketId):
        return self.Talk.client.findContactByUserTicket(ticketId)

    def getAllContactIds(self):
        return self.Talk.client.getAllContactIds()

    def getBlockedContactIds(self):
        return self.Talk.client.getBlockedContactIds()

    def getContact(self, mid):
        return self.Talk.client.getContact(mid)

    def getContacts(self, midlist):
        return self.Talk.client.getContacts(midlist)

    def getFavoriteMids(self):
        return self.Talk.client.getFavoriteMids()

    def getHiddenContactMids(self):
        return self.Talk.client.getHiddenContactMids()

    """Group"""

    def acceptGroupInvitation(self, groupId):
        return self.Talk.client.acceptGroupInvitation(0, groupId)

    def acceptGroupInvitationByTicket(self, groupId, ticketId):
        return self.Talk.client.acceptGroupInvitationByTicket(
            0, groupId, ticketId)

    def cancelGroupInvitation(self, groupId, contactIds):
        return self.Talk.client.cancelGroupInvitation(0, groupId, contactIds)

    def createGroup(self, name, midlist):
        return self.Talk.client.createGroup(0, name, midlist)

    def getGroup(self, groupId):
        return self.Talk.client.getGroup(groupId)

    def getGroups(self, groupIds):
        return self.Talk.client.getGroups(groupIds)

    def getGroupIdsInvited(self):
        return self.Talk.client.getGroupIdsInvited()

    def getGroupIdsJoined(self):
        return self.Talk.client.getGroupIdsJoined()

    def inviteIntoGroup(self, groupId, midlist):
        return self.Talk.client.inviteIntoGroup(0, groupId, midlist)

    def kickoutFromGroup(self, groupId, midlist):
        return self.Talk.client.kickoutFromGroup(0, groupId, midlist)

    def leaveGroup(self, groupId):
        return self.Talk.client.leaveGroup(0, groupId)

    def rejectGroupInvitation(self, groupId):
        return self.Talk.client.rejectGroupInvitation(0, groupId)

    def reissueGroupTicket(self, groupId):
        return self.Talk.client.reissueGroupTicket(groupId)

    def updateGroup(self, groupObject):
        return self.Talk.client.updateGroup(0, groupObject)

    def findGroupByTicket(self, ticketId):
        return self.Talk.client.findGroupByTicket(ticketId)

    """Room"""

    def createRoom(self, midlist):
        return self.Talk.client.createRoom(0, midlist)

    def getRoom(self, roomId):
        return self.Talk.client.getRoom(roomId)

    def inviteIntoRoom(self, roomId, midlist):
        return self.Talk.client.inviteIntoRoom(0, roomId, midlist)

    def leaveRoom(self, roomId):
        return self.Talk.client.leaveRoom(0, roomId)

    """TIMELINE"""

    def new_post(self, text):
        return self.channel.new_post(text)

    def like(self, mid, postid, likeType=1001):
        return self.channel.like(mid, postid, likeType)

    def comment(self, mid, postid, text):
        return self.channel.comment(mid, postid, text)

    def activity(self, limit=20):
        return self.channel.activity(limit)

    def getAlbum(self, gid):

        return self.channel.getAlbum(gid)

    def changeAlbumName(self, gid, name, albumId):
        return self.channel.changeAlbumName(gid, name, albumId)

    def deleteAlbum(self, gid, albumId):
        return self.channel.deleteAlbum(gid, albumId)

    def getNote(self, gid, commentLimit, likeLimit):
        return self.channel.getNote(gid, commentLimit, likeLimit)

    def getDetail(self, mid):
        return self.channel.getDetail(mid)

    def getHome(self, mid):
        return self.channel.getHome(mid)

    def createAlbum(self, gid, name):
        return self.channel.createAlbum(gid, name)

    def createAlbum2(self, gid, name, path):
        return self.channel.createAlbum(gid, name, path, oid)

    def __validate(self, mail, passwd, cert, token, qr):
        if mail is not None and passwd is not None and cert is None:
            return 1
        elif mail is not None and passwd is not None and cert is not None:
            return 2
        elif token is not None:
            return 3
        elif qr is True:
            return 4
        else:
            return 5

    def loginResult(self, callback=None):
        if callback is None:
            callback = def_callback

            prof = self.getProfile()

            print("One Piece Offical BOT")
            print("mid -> " + prof.mid)
            print("name -> " + prof.displayName)
            print("authToken -> " + self.authToken)
            print("cert -> " + self.cert if self.cert is not None else "")