# -*- coding: utf-8 -*- from akad.ttypes import Message from random import randint from bs4 import BeautifulSoup import json, ntpath, requests , shutil def loggedIn(func): def checkLogin(*args, **kwargs): if args[0].isLogin: return func(*args, **kwargs) else: args[0].callback.other('You want to call the function, you must login to LINE') return checkLogin class Talk(object): isLogin = False _messageReq = {} _unsendMessageReq = 0 def __init__(self): self.isLogin = True """BlalaBlala""" @loggedIn def download_image(self, query): print('Download Gambar') query = query.replace(" ", "+") url = "https://www.google.com/search?espv=2&biw=1366&bih=667&tbm=isch&oq=kuc&aqs=mobile-gws-lite.0.0l5&q=" + (query) mozhdr = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"} sb_url = url + query req = requests.get(sb_url, headers = mozhdr) html = req.content soupeddata = BeautifulSoup(html, "lxml") images = soupeddata.find_all("div", {"class": "rg_meta notranslate"}) images = [i.text for i in images] images = [json.loads(i) for i in images] images = images[0]['ou'] return images @loggedIn def youtube(self, query): print('Searching Youtube') search_url="https://www.youtube.com/results?search_query=" mozhdr = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3'} sb_url = search_url + query sb_get = requests.get(sb_url, headers = mozhdr) soupeddata = BeautifulSoup(sb_get.content, "html.parser") yt_links = soupeddata.find_all("a", class_ = "yt-uix-tile-link") x = (yt_links[1]) yt_href = x.get("href") yt_href = yt_href.replace("watch?v=", "") yt_final = "https://youtu.be" + str(yt_href) return yt_final """User""" @loggedIn def acquireEncryptedAccessToken(self, featureType=2): return self.talk.acquireEncryptedAccessToken(featureType) @loggedIn def getProfile(self): return self.talk.getProfile() @loggedIn def getSettings(self): return self.talk.getSettings() @loggedIn def getUserTicket(self): return self.talk.getUserTicket() @loggedIn def updateProfile(self, profileObject): return self.talk.updateProfile(0, profileObject) @loggedIn def updateSettings(self, settingObject): return self.talk.updateSettings(0, settingObject) @loggedIn def updateProfileAttribute(self, attrId, value): return self.talk.updateProfileAttribute @loggedIn def updateDisplayPicture(self, hash_id): return self.talk.updateProfileAttribute(0, 8, hash_id) """Operation""" @loggedIn def fetchOperation(self, revision, count): return self.talk.fetchOperations(revision, count) @loggedIn def getLastOpRevision(self): return self.talk.getLastOpRevision() """Message""" @loggedIn def sendMessage(self, to, text, contentMetadata={}, contentType=0): msg = Message() msg.to, msg._from = to, self.profile.mid msg.text = text msg.contentType, msg.contentMetadata = contentType, contentMetadata if to not in self._messageReq: self._messageReq[to] = -1 self._messageReq[to] += 1 return self.talk.sendMessage(self._messageReq[to], msg) @loggedIn def sendMessageWithContent(self, to, text, name, url, iconlink): contentMetadata = { 'AGENT_NAME': name, 'AGENT_LINK': url, 'AGENT_ICON': iconlink } return self.sendMessage(to, text, contentMetadata, 0) """ Usage: @to Integer @text String @dataMid List of user Mid """ @loggedIn def sendSticker(self, to, packageId, stickerId): contentMetadata = { 'STKVER': '100', 'STKPKGID': packageId, 'STKID': stickerId } return self.sendMessage(to, '', contentMetadata, 7) @loggedIn def sendContact(self, to, mid): contentMetadata = {'mid': mid} return self.sendMessage(to, '', contentMetadata, 13) @loggedIn def sendGift(self, to, productId, productType): if productType not in ['theme','sticker']: raise Exception('Invalid productType value') contentMetadata = { 'MSGTPL': str(randint(0, 12)), 'PRDTYPE': productType.upper(), 'STKPKGID' if productType == 'sticker' else 'PRDID': productId } return self.sendMessage(to, '', contentMetadata, 9) @loggedIn def sendMessageAwaitCommit(self, to, text, contentMetadata={}, contentType=0): msg = Message() msg.to, msg._from = to, self.profile.mid msg.text = text msg.contentType, msg.contentMetadata = contentType, contentMetadata if to not in self._messageReq: self._messageReq[to] = -1 self._messageReq[to] += 1 return self.talk.sendMessageAwaitCommit(self._messageReq[to], msg) @loggedIn def unsendMessage(self, messageId): self._unsendMessageReq += 1 return self.talk.unsendMessage(self._unsendMessageReq, messageId) @loggedIn def requestResendMessage(self, senderMid, messageId): return self.talk.requestResendMessage(0, senderMid, messageId) @loggedIn def getRecentMessagesV2(self, messageBoxId, messagesCount=101): return self.talk.getRecentMessagesV2(messageBoxId, messagesCount) @loggedIn def respondResendMessage(self, receiverMid, originalMessageId, resendMessage, errorCode): return self.talk.respondResendMessage(0, receiverMid, originalMessageId, resendMessage, errorCode) @loggedIn def removeMessage(self, messageId): return self.talk.removeMessage(messageId) @loggedIn def removeAllMessages(self, lastMessageId): return self.talk.removeAllMessages(0, lastMessageId) @loggedIn def removeMessageFromMyHome(self, messageId): return self.talk.removeMessageFromMyHome(messageId) @loggedIn def destroyMessage(self, chatId, messageId): return self.talk.destroyMessage(0, chatId, messageId, sessionId) @loggedIn def sendChatChecked(self, consumer, messageId): return self.talk.sendChatChecked(0, consumer, messageId) @loggedIn def sendEvent(self, messageObject): return self.talk.sendEvent(0, messageObject) @loggedIn def getLastReadMessageIds(self, chatId): return self.talk.getLastReadMessageIds(0, chatId) @loggedIn def getPreviousMessagesV2WithReadCount(self, messageBoxId, endMessageId, messagesCount=50): return self.talk.getPreviousMessagesV2WithReadCount(messageBoxId, endMessageId, messagesCount) """Object""" @loggedIn def sendImage(self, to, path): objectId = self.sendMessage(to=to, text=None, contentType = 1).id return self.uploadObjTalk(path=path, type='image', returnAs='bool', objId=objectId) @loggedIn def sendImageWithURL(self, to, url): path = self.downloadFileURL(url, 'path') return self.sendImage(to, path) @loggedIn def sendImageWithURL2(self, to, url): """Send a image with given image url :param url: image url to send """ path = 'tmp/pythonLine.data' r = requests.get(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: shutil.copyfileobj(r.raw, f) else: raise Exception('Download image failure.') try: self.sendImage(to, path) except Exception as e: raise e @loggedIn def arifistifik(self, to, mid, firstmessage, lastmessage): try: arrData = "" text = "%s " %(str(firstmessage)) arr = [] mention = "@ARIFISTIFIK " slen = str(len(text)) elen = str(len(text) + len(mention) - 1) arrData = {'S':slen, 'E':elen, 'M':mid} arr.append(arrData) text += mention + str(lastmessage) self.sendMessage(to,text, {'MENTION': str('{"MENTIONEES":' + json.dumps(arr) + '}')}, 0) except Exception as error: print(error) @loggedIn def sendText(self, Tomid, text): msg = Message() msg.to = Tomid msg.text = text return self.talk.sendMessage(0, msg) @loggedIn def kedapkedip(self, Tomid, text): msg = Message() msg.to = Tomid t1 = "\xf4\x80\xb0\x82\xf4\x80\xb0\x82\xf4\x80\xb0\x82\xf4\x80\xb0\x82\xf4\x80\xa0\x81\xf4\x80\xa0\x81\xf4\x80\xa0\x81" t2 = "\xf4\x80\x82\xb3\xf4\x8f\xbf\xbf" DPK = t1 + text + t2 msg.text = DPK.replace("\n", " ") return self.talk.sendMessage(0, msg) @loggedIn def textDPK(self, Tomid, text): msg = Message() msg.to = Tomid t1 = "Ì" t2 = "Ì" DPK = t1 + text + t2 msg.text = DPK.replace("\n", " ") return self.talk.sendMessage(0, msg) @loggedIn def sendGIF(self, to, path): return self.uploadObjTalk(path=path, type='gif', returnAs='bool', to=to) @loggedIn def sendGIFWithURL(self, to, url): path = self.downloadFileURL(url, 'path') return self.sendGIF(to, path) @loggedIn def sendVideo(self, to, path): objectId = self.sendMessage(to=to, text=None, contentMetadata={'VIDLEN': '60000','DURATION': '60000'}, contentType = 2).id return self.uploadObjTalk(path=path, type='video', returnAs='bool', objId=objectId) @loggedIn def sendVideoWithURL(self, to, url): path = self.downloadFileURL(url, 'path') return self.sendVideo(to, path) @loggedIn def sendAudio(self, to, path): objectId = self.sendMessage(to=to, text=None, contentType = 3).id return self.uploadObjTalk(path=path, type='audio', returnAs='bool', objId=objectId) @loggedIn def sendAudioWithURL(self, to, url): path = self.downloadFileURL(url, 'path') return self.sendAudio(to, path) @loggedIn def sendFile(self, to, path, file_name=''): if file_name == '': file_name = ntpath.basename(path) file_size = len(open(path, 'rb').read()) objectId = self.sendMessage(to=to, text=None, contentMetadata={'FILE_NAME': str(file_name),'FILE_SIZE': str(file_size)}, contentType = 14).id return self.uploadObjTalk(path=path, type='file', returnAs='bool', objId=objectId) @loggedIn def sendFileWithURL(self, to, url, fileName=''): path = self.downloadFileURL(url, 'path') return self.sendFile(to, path, fileName) @loggedIn def mention(self, to, nama): aa = "" bb = "" strt = int(0) akh = int(0) nm = nama myid = self.talk.getProfile().mid if myid in nm: nm.remove(myid) for mm in nm: akh = akh + 6 aa += """{"S":"""+json.dumps(str(strt))+""","E":"""+json.dumps(str(akh))+""","M":"""+json.dumps(mm)+"},""" strt = strt + 7 akh = akh + 1 bb += "@nrik \n" aa = (aa[:int(len(aa)-1)]) text = bb try: msg = Message() msg.to = to msg.text = text msg.contentMetadata = {'MENTION':'{"MENTIONEES":['+aa+']}'} msg.contentType = 0 self.talk.sendMessage(0, msg) except Exception as error: print(error, str(error)) """Contact""" @loggedIn def blockContact(self, mid): return self.talk.blockContact(0, mid) @loggedIn def unblockContact(self, mid): return self.talk.unblockContact(0, mid) @loggedIn def findAndAddContactByMetaTag(self, userid, reference): return self.talk.findAndAddContactByMetaTag(0, userid, reference) @loggedIn def findAndAddContactsByMid(self, mid): return self.talk.findAndAddContactsByMid(0, mid, 0, '') @loggedIn def findAndAddContactsByEmail(self, emails=[]): return self.talk.findAndAddContactsByEmail(0, emails) @loggedIn def findAndAddContactsByUserid(self, userid): return self.talk.findAndAddContactsByUserid(0, userid) @loggedIn def findContactsByUserid(self, userid): return self.talk.findContactByUserid(userid) @loggedIn def findContactByTicket(self, ticketId): return self.talk.findContactByUserTicket(ticketId) @loggedIn def getAllContactIds(self): return self.talk.getAllContactIds() @loggedIn def getBlockedContactIds(self): return self.talk.getBlockedContactIds() @loggedIn def getContact(self, mid): return self.talk.getContact(mid) @loggedIn def getContacts(self, midlist): return self.talk.getContacts(midlist) @loggedIn def getFavoriteMids(self): return self.talk.getFavoriteMids() @loggedIn def getHiddenContactMids(self): return self.talk.getHiddenContactMids() @loggedIn def tryFriendRequest(self, midOrEMid, friendRequestParams, method=1): return self.talk.tryFriendRequest(midOrEMid, method, friendRequestParams) @loggedIn def makeUserAddMyselfAsContact(self, contactOwnerMid): return self.talk.makeUserAddMyselfAsContact(contactOwnerMid) @loggedIn def getContactWithFriendRequestStatus(self, id): return self.talk.getContactWithFriendRequestStatus(id) @loggedIn def reissueUserTicket(self, expirationTime=100, maxUseCount=100): return self.talk.reissueUserTicket(expirationTime, maxUseCount) @loggedIn def cloneContactProfile(self, mid): contact = self.getContact(mid) profile = self.profile profile.displayName = contact.displayName profile.statusMessage = contact.statusMessage profile.pictureStatus = contact.pictureStatus self.updateProfileAttribute(8, profile.pictureStatus) return self.updateProfile(profile) """Group""" @loggedIn def getChatRoomAnnouncementsBulk(self, chatRoomMids): return self.talk.getChatRoomAnnouncementsBulk(chatRoomMids) @loggedIn def getChatRoomAnnouncements(self, chatRoomMid): return self.talk.getChatRoomAnnouncements(chatRoomMid) @loggedIn def createChatRoomAnnouncement(self, chatRoomMid, type, contents): return self.talk.createChatRoomAnnouncement(0, chatRoomMid, type, contents) @loggedIn def removeChatRoomAnnouncement(self, chatRoomMid, announcementSeq): return self.talk.removeChatRoomAnnouncement(0, chatRoomMid, announcementSeq) @loggedIn def getGroupWithoutMembers(self, groupId): return self.talk.getGroupWithoutMembers(groupId) @loggedIn def findGroupByTicket(self, ticketId): return self.talk.findGroupByTicket(ticketId) @loggedIn def acceptGroupInvitation(self, groupId): return self.talk.acceptGroupInvitation(0, groupId) @loggedIn def acceptGroupInvitationByTicket(self, groupId, ticketId): return self.talk.acceptGroupInvitationByTicket(0, groupId, ticketId) @loggedIn def cancelGroupInvitation(self, groupId, contactIds): return self.talk.cancelGroupInvitation(0, groupId, contactIds) @loggedIn def createGroup(self, name, midlist): return self.talk.createGroup(0, name, midlist) @loggedIn def getGroup(self, groupId): return self.talk.getGroup(groupId) @loggedIn def getGroups(self, groupIds): return self.talk.getGroups(groupIds) @loggedIn def getGroupsV2(self, groupIds): return self.talk.getGroupsV2(groupIds) @loggedIn def getCompactGroup(self, groupId): return self.talk.getCompactGroup(groupId) @loggedIn def getCompactRoom(self, roomId): return self.talk.getCompactRoom(roomId) @loggedIn def getGroupIdsByName(self, groupName): gIds = [] for gId in self.getGroupIdsJoined(): g = self.getCompactGroup(gId) if groupName in g.name: gIds.append(gId) return gIds @loggedIn def getGroupIdsInvited(self): return self.talk.getGroupIdsInvited() @loggedIn def getGroupIdsJoined(self): return self.talk.getGroupIdsJoined() @loggedIn def updateGroupPreferenceAttribute(self, groupMid, updatedAttrs): return self.talk.updateGroupPreferenceAttribute(0, groupMid, updatedAttrs) @loggedIn def inviteIntoGroup(self, groupId, midlist): return self.talk.inviteIntoGroup(0, groupId, midlist) @loggedIn def kickoutFromGroup(self, groupId, midlist): return self.talk.kickoutFromGroup(0, groupId, midlist) @loggedIn def leaveGroup(self, groupId): return self.talk.leaveGroup(0, groupId) @loggedIn def rejectGroupInvitation(self, groupId): return self.talk.rejectGroupInvitation(0, groupId) @loggedIn def reissueGroupTicket(self, groupId): return self.talk.reissueGroupTicket(groupId) @loggedIn def updateGroup(self, groupObject): return self.talk.updateGroup(0, groupObject) """Room""" @loggedIn def createRoom(self, midlist): return self.talk.createRoom(0, midlist) @loggedIn def getRoom(self, roomId): return self.talk.getRoom(roomId) @loggedIn def inviteIntoRoom(self, roomId, midlist): return self.talk.inviteIntoRoom(0, roomId, midlist) @loggedIn def leaveRoom(self, roomId): return self.talk.leaveRoom(0, roomId) """Call""" @loggedIn def acquireCallTalkRoute(self, to): return self.talk.acquireCallRoute(to) """Report""" @loggedIn def reportSpam(self, chatMid, memberMids=[], spammerReasons=[], senderMids=[], spamMessageIds=[], spamMessages=[]): return self.talk.reportSpam(chatMid, memberMids, spammerReasons, senderMids, spamMessageIds, spamMessages) @loggedIn def reportSpammer(self, spammerMid, spammerReasons=[], spamMessageIds=[]): return self.talk.reportSpammer(spammerMid, spammerReasons, spamMessageIds)