def open_element(chat_id,element_path): storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) if element_path[-1] == '..': element_path = element_path[0:-2] element = get_element(storage,element_path) if element: if element['mime_type'] == 'folder': users.update_conf(chat_id, 'General', 'position', element_path) display_folder(chat_id,storage,element_path) elif element['mime_type'] == 'telegram/audio' or element['mime_type'] == 'audio/telegram': methods.send_audio(chat_id, element['file_id']) display_folder(chat_id,storage,element_path[0:-1]) elif element['mime_type'] == 'telegram/contact': profile_photo = methods.get_user_profile_photos(element['user_id'],limit = 1) methods.send_photo(chat_id, profile_photo['result']['photos'][0][0]['file_id'], element['first_name'] + ' ' + element['last_name'] + '\n' +\ '+' + element['phone_number'],) methods.send_message(chat_id, element['first_name'] + ' ' + element['last_name'] + '\n' +\ '+' + element['phone_number'] + '\n' +\ str(element['user_id'])) display_folder(chat_id,storage,element_path[0:-1]) elif element['mime_type'] == 'telegram/location': methods.send_location(chat_id, element['latitude'], element['longitude']) display_folder(chat_id,storage,element_path[0:-1]) elif element['mime_type'] == 'telegram/message': methods.forward_message(chat_id, chat_id, element['message_id']) display_folder(chat_id,storage,element_path[0:-1]) elif element['mime_type'] == 'telegram/photo': methods.send_photo(chat_id, element['file_id']) display_folder(chat_id,storage,element_path[0:-1]) elif element['mime_type'] == 'telegram/url-stickerpack': methods.send_message(chat_id, 'https://telegram.me/addstickers/' + element['stickerpack_name']) display_folder(chat_id,storage,element_path[0:-1]) elif element['mime_type'] == 'telegram/url-chat': methods.send_message(chat_id, 'https://telegram.me/joinchat/' + element['group_name']) display_folder(chat_id,storage,element_path[0:-1]) elif element['mime_type'] == 'telegram/url-contact': methods.send_message(chat_id, 'https://telegram.me/' + element['contact_name']) display_folder(chat_id,storage,element_path[0:-1]) else: methods.send_document(chat_id, element['file_id']) display_folder(chat_id,storage,element_path[0:-1]) else: methods.send_message(chat_id, '⚠ ' + position_to_path(element_path) + ' does not exists') display_folder(chat_id, storage, literal_eval(users.get_conf_value(chat_id, 'General', 'position', '[]')))
def document_sended(chat_id, document): task = users.get_conf_value(chat_id, 'General', 'task', '') if task == '': storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) position = literal_eval(users.get_conf_value(chat_id, 'General', 'position', '[]')) file_name = document['file_name'].replace('\'','\\\'') document['icon'] = None if file_name in get_element(storage,position)['content'].keys(): file_name = correct(file_name) storage = set_element(storage,position,{file_name:document},'content') users.update_conf(chat_id, 'General', 'storage', storage) display_folder(chat_id,storage,position)
def run(): running = True while running: try: updates = methods.get_last_updates() except KeyboardInterrupt: print('\nout') quit() except: pass for update in updates['result']: try: print(update) if 'audio' in update['message'].keys(): audio = update['message']['audio'] audio['file_name'] = format(datetime.now(),'audio_%Y-%m-%d_%H-%M-%S.ogg') audio['mime_type'] = 'telegram/audio' threading.Thread( target=document_sended( int(update['message']['chat']['id']), audio) ).start() elif 'document' in update['message'].keys(): threading.Thread( target=document_sended( int(update['message']['chat']['id']), update['message']['document']) ).start() elif 'photo' in update['message'].keys(): photo = update['message']['photo'][0] photo['file_name'] = format(datetime.now(),'photo_%Y-%m-%d_%H-%M-%S.jpg') photo['mime_type'] = 'telegram/photo' threading.Thread( target=document_sended( int(update['message']['chat']['id']), photo) ).start() #chat_id = int(update['message']['chat']['id']) #methods.send_message(chat_id, '⛔ To save an image attach it as a file (uncompressed), not as a photo') #display_folder(chat_id, #literal_eval(users.get_conf_value(chat_id, #'General', #'storage', #str(DEFAULT_FOLDER_STRUCTURE))), #literal_eval(users.get_conf_value(chat_id, 'General', #'position', '[]'))) elif 'sticker' in update['message'].keys(): sticker = update['message']['sticker'] sticker['file_name'] = format(datetime.now(),'sticker_%Y-%m-%d_%H-%M-%S.webp') sticker['mime_type'] = 'image/webp' threading.Thread( target=document_sended( int(update['message']['chat']['id']), sticker) ).start() elif 'contact' in update['message'].keys(): contact = update['message']['contact'] contact['file_name'] = contact['first_name'] + ' ' + contact['last_name'] contact['mime_type'] = 'telegram/contact' threading.Thread( target=document_sended( int(update['message']['chat']['id']), contact) ).start() elif 'location' in update['message'].keys(): location = update['message']['location'] location['file_name'] = str(location['longitude']) + ',' +\ str(location['latitude']) location['mime_type'] = 'telegram/location' threading.Thread( target=document_sended( int(update['message']['chat']['id']), location) ).start() elif 'forward_from' in update['message'].keys(): message = {'file_name': 'message from ' + update['message']['forward_from']['first_name'], 'mime_type': 'telegram/message', 'message_id': update['message']['message_id'], 'forward_from': update['message']['forward_from'], 'forward_date': update['message']['forward_date']} threading.Thread( target=document_sended( int(update['message']['chat']['id']), message) ).start() elif 'text' in update['message'].keys(): text = update['message']['text'] if text.startswith('https://telegram.me/addstickers/'): stickerpack = {'file_name': re.findall('https://telegram.me/addstickers/(.*)',text)[0], 'mime_type': 'telegram/url-stickerpack', 'stickerpack_name': re.findall('https://telegram.me/addstickers/(.*)',text)[0]} threading.Thread( target=document_sended( int(update['message']['chat']['id']), stickerpack) ).start() elif text.startswith('https://telegram.me/joinchat/'): group = {'file_name': re.findall('https://telegram.me/joinchat/(.*)',text)[0], 'mime_type': 'telegram/url-chat', 'group_name': re.findall('https://telegram.me/joinchat/(.*)',text)[0]} threading.Thread( target=document_sended( int(update['message']['chat']['id']), group) ).start() elif text.startswith('https://telegram.me/'): group = {'file_name': re.findall('https://telegram.me/(.*)',text)[0], 'mime_type': 'telegram/url-contact', 'contact_name': re.findall('https://telegram.me/(.*)',text)[0]} threading.Thread( target=document_sended( int(update['message']['chat']['id']), group) ).start() else: threading.Thread( target=perform( int(update['message']['chat']['id']), update['message']['text']) ).start() else: chat_id = int(update['message']['chat']['id']) methods.send_message(chat_id, '⛔ Unsuported media') display_folder(chat_id, literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))), literal_eval(users.get_conf_value(chat_id, 'General', 'position', '[]'))) except: methods.send_message(int(update['message']['chat']['id']), 'Unexpected ERROR, send this message to @RJornetC to report:\n' + xstr(sys.exc_info()))
def perform(chat_id, text): position = literal_eval(users.get_conf_value(chat_id, 'General', 'position', '[]')) task = users.get_conf_value(chat_id, 'General', 'task', '') responses = literal_eval(users.get_conf_value(chat_id, 'General', 'responses', '{}')) try: text = responses[text] except KeyError: pass if text == '/start': storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) display_folder(chat_id,storage,position) elif task == '☑': selected = literal_eval(users.get_conf_value(chat_id, 'General', 'selected', '[]')) storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) responses =literal_eval(users.get_conf_value(chat_id, 'General', 'responses', '{}')) try: text = responses[text] except KeyError: pass text = text.replace(chr(65039),'') if is_a_emoji(text[0]): code = text[0] else: code = None if code == '✖': users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position) elif code == '▪': selected = list(get_element(storage,position)['content'].keys()) users.update_conf(chat_id, 'General', 'selected', str(selected)) display_folder(chat_id,storage,position,selected) elif code == '▫': selected = [] users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position,selected) elif code == '❌': for element in selected: element = protect_string(element) del_element(storage,position + [element]) users.update_conf(chat_id, 'General', 'storage', str(storage)) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position) elif code == '📑': copy_elements(chat_id, storage, position, selected) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position) elif code == '✂': copy_elements(chat_id, storage, position, selected) for element in selected: element = protect_string(element) del_element(storage,position + [element]) users.update_conf(chat_id, 'General', 'storage', str(storage)) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position) elif code == '✏' and len(selected) == 1: users.update_conf(chat_id, 'General', 'task', '✏') methods.send_message(chat_id, 'Insert a new name:',reply_markup = {'keyboard': [['✖ Cancel']], 'resize_keyboard':True}) users.update_conf(chat_id, 'General', 'position', position + selected) elif code == '🔵' and len(selected) == 1: users.update_conf(chat_id, 'General', 'task', '🔵') methods.send_message(chat_id, 'Send an emoji:',reply_markup = {'keyboard': [['🔵 Default','✖ Cancel']], 'resize_keyboard':True}) users.update_conf(chat_id, 'General', 'position', position + selected) elif code == 'ℹ' and len(selected) == 1: users.update_conf(chat_id, 'General', 'position', position + selected) methods.send_message(chat_id, '⛔ Not implemented') elif text in get_element(storage,position)['content']: if text in selected: selected.remove(text) else: selected.append(text) users.update_conf(chat_id, 'General', 'selected', selected) display_folder(chat_id,storage,position,selected) else: methods.send_message(chat_id, '⚠ ' + text + ' does not exists') elif task == '✏': if text[0] == '✖': storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) users.update_conf(chat_id, 'General', 'position', position[0:-1]) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position[0:-1]) elif text == '.' or text == '..': methods.send_message(chat_id, '⛔ Name can not be "." or ".."\nInsert another folder name:') elif has_emojis(text): methods.send_message(chat_id, '⛔ Name can not contain emojis\nInsert another folder name:') else: storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) element = get_element(storage,position) if text in get_element(storage,position[0:-1])['content'].keys(): methods.send_message(chat_id, '⛔ There is already a folder named ' + text + '\nInsert another folder name:') else: print(storage,position[0:-1],{text:element}) storage = set_element(storage,position[0:-1],{text:element},'content') del_element(storage,position) users.update_conf(chat_id, 'General', 'storage', str(storage)) users.update_conf(chat_id, 'General', 'position', position[0:-1]) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position[0:-1]) elif task == '🔵': if is_a_emoji(text[0]) and len(text) == 1: storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) storage = set_element(storage,position,{'icon':text}) users.update_conf(chat_id, 'General', 'storage', str(storage)) users.update_conf(chat_id, 'General', 'position', position[0:-1]) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position[0:-1]) elif text == '✖ Cancel': storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) users.update_conf(chat_id, 'General', 'position', position[0:-1]) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position[0:-1]) elif text == '🔵 Default': storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) storage = set_element(storage,position,{'icon':None}) users.update_conf(chat_id, 'General', 'storage', str(storage)) users.update_conf(chat_id, 'General', 'position', position[0:-1]) users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'selected', '[]') display_folder(chat_id,storage,position[0:-1]) else: methods.send_message(chat_id, '⛔ Icon must be an emoji') elif task == '➕': if text[0] == '✖': storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) users.update_conf(chat_id, 'General', 'task', '') display_folder(chat_id,storage,position) elif text == '.' or text == '..': methods.send_message(chat_id, '⛔ Name can not be "." or ".."\nInsert another folder name:') elif has_emojis(text): methods.send_message(chat_id, '⛔ Name can not contain emojis\nInsert another folder name:') else: storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) text=protect_string(text) if text in get_element(storage,position)['content'].keys(): methods.send_message(chat_id, '⛔ There is already a folder named ' + text + '\nInsert another folder name:') else: new_folder = {text:DEFAULT_FOLDER} storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) storage = set_element(storage,position,new_folder,'content') users.update_conf(chat_id, 'General', 'task', '') users.update_conf(chat_id, 'General', 'storage', storage) display_folder(chat_id,storage,position) elif text[0] == '➕': users.update_conf(chat_id, 'General', 'task', '➕') methods.send_message(chat_id, 'Insert folder name:',reply_markup = {'keyboard': [['✖ Cancel']], 'resize_keyboard':True}) elif text[0] == '☑': storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) selected = literal_eval(users.get_conf_value(chat_id, 'General', 'selected', '[]')) users.update_conf(chat_id, 'General', 'task', '☑') display_folder(chat_id,storage,position,selected) elif text[0] == '📋': clipboard = literal_eval(users.get_conf_value(chat_id, 'General', 'clipboard', '{}')) if clipboard == {}: methods.send_message(chat_id,'⚠ There is nothing to paste in the clipboard') else: storage = literal_eval(users.get_conf_value(chat_id, 'General', 'storage', str(DEFAULT_FOLDER_STRUCTURE))) elements = get_element(storage,position)['content'].keys() name_error = False for clipboard_element in clipboard.keys(): if clipboard_element in elements: clipboard[correct(clipboard_element)] = clipboard[clipboard_element] del clipboard[clipboard_element] if name_error: methods.send_message(chat_id, '⛔ There is already a file named ' + name_error + '\nRename the folder before paste') else: storage = set_element(storage,position,clipboard,'content') users.update_conf(chat_id, 'General', 'clipboard', '{}') users.update_conf(chat_id, 'General', 'storage', storage) display_folder(chat_id,storage,position) else: responses =literal_eval(users.get_conf_value(chat_id, 'General', 'responses', '{}')) try: text = responses[text] except KeyError: pass open_element(chat_id,position + [text])
def display_folder(chat_id,storage,position,selection = None): storage = get_element(storage,position)['content'] elements = list(storage.keys()) elements = sorted(elements, key=lambda s: s.lower()) folder_elements = [] file_elements = [] for element in elements: if storage[element]['mime_type'] == 'folder': folder_elements.append(element) else: file_elements.append(element) elements = folder_elements + file_elements print(elements) message = position_to_path(position) if selection != None: keyboard = [['✖️End selection','▪ Select all','▫ Unselect all']] if len(selection) > 0: if len(selection) == 1: keyboard.append(['✏ Rename','🔵 Change icon','ℹ Properties','❌ Remove','📑 Copy','✂ Cut']) else: keyboard.append(['❌ Remove','📑 Copy','✂ Cut']) else: keyboard = [['➕ Folder']] if not is_empty(storage): keyboard[0].append('☑ Select') clipboard = literal_eval(users.get_conf_value(chat_id, 'General', 'clipboard', '{}')) if not clipboard == {}: keyboard[0].append('📋 Paste') if position == [] or selection != None: responses = {} else: keyboard.append(['⬆ ..']) responses = {'⬆ ..':'..'} for element in elements: icon = storage[element]['icon'] if icon == None: try: icon = DEFAULT_FULL_MIMETYPE_ICONS[storage[element]['mime_type']] except KeyError: not_full_icons = set(literal_eval(users.get_conf_value('recolection', 'General', 'not-full-icons', '{}'))) not_full_icons.add(storage[element]['mime_type']) users.update_conf('recolection', 'General', 'not-full-icons', not_full_icons) try: icon = DEFAULT_MIMETYPE_ICONS[storage[element]['mime_type'].split('/')[0]] except KeyError: not_icons = set(literal_eval(users.get_conf_value('recolection', 'General', 'not-icons', '{}'))) not_icons.add(storage[element]['mime_type']) users.update_conf('recolection', 'General', 'not-icons', not_icons) icon = DEFAULT_ICON if selection == None: line = icon + ' ' + element elif element in selection: line = '🔳 ' + icon + ' ' + element else: line = '◻ ' + icon + ' ' + element message += '\n' + line responses[line] = element keyboard.append([line]) users.update_conf(chat_id, 'General', 'responses', responses) methods.send_message(chat_id, message, reply_markup = {'keyboard':keyboard, 'resize_keyboard':True})