Suppenbiatch

send all files including files in sub folders

Aug 29th, 2020 (edited)
2,051
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.77 KB | None | 0 0
  1. import math
  2. import os
  3. import re
  4. import time
  5.  
  6. import color
  7. from discord_webhook import DiscordWebhook
  8.  
  9. from send_discord_files import webhook_urls
  10.  
  11.  
  12. def get_file_info(folder_path, filename):
  13.     name = ''.join(i for i in filename if i not in '\/:*?<>|')
  14.     full_path = os.path.join(folder_path, filename)
  15.     size = os.path.getsize(full_path) / (1024 * 1024)
  16.     return name, full_path, size
  17.  
  18.  
  19. def rate_limit(r):
  20.     if r.status_code == 429:
  21.         error_msg = r.json()
  22.         rate_limit_wait = roundup(int(error_msg['retry_after']), 1000) / 1000
  23.         color.cprint_red(f'Sleeping {rate_limit_wait}s because of a hard rate limit')
  24.         time.sleep(rate_limit_wait)
  25.         if error_msg['global']:
  26.             color.cprint_magenta('Global rate limit hit!')
  27.         return True
  28.     elif int(r.headers['x-ratelimit-remaining']) == 0:
  29.         rate_limit_wait = abs(int(r.headers['x-ratelimit-reset']) - time.time() + 0.2)
  30.         color.cprint_yellow(f'sleeping {round(rate_limit_wait, 4)}s because of a soft rate limit')
  31.         time.sleep(rate_limit_wait)
  32.         return False
  33.  
  34.  
  35. def roundup(x: int or float, base: int):
  36.     return int(math.ceil(x / float(base))) * base
  37.  
  38.  
  39. def get_folders(path):
  40.     return [dirpath for dirpath, _, _ in os.walk(path)]
  41.  
  42.  
  43. # Folder Path
  44. folder = r'C:\Normal\Path'
  45. # Change default username:
  46. username = ''
  47. # Change default avatar:
  48. avatar_url = ''
  49. # Use own Webhook URL here:
  50. webhook_url = webhook_urls.spam
  51.  
  52. file_tree = []
  53. for sub_folder in get_folders(folder):
  54.     (_, _, filenames) = next(os.walk(sub_folder))
  55.     if filenames:
  56.         try:
  57.             filenames.sort(key=lambda x: int(re.sub('\D', '', x)))
  58.         except ValueError:
  59.             pass
  60.         file_tree.append((sub_folder, filenames))
  61.  
  62. discord_files = [get_file_info(folder_path, file) for folder_path, files in file_tree for file in files]
  63.  
  64. counter = 0
  65. for file_name, file_path, file_size in discord_files:
  66.     if file_size >= 8:
  67.         print(f'{file_name} is with {round(file_size, 2)}MB to large to send to discord')
  68.         counter += 1
  69.         continue
  70.     webhook = DiscordWebhook(url=webhook_url, username=username, avatar_url=avatar_url)
  71.     with open(file_path, "rb") as f:
  72.         webhook.add_file(file=f.read(), filename=file_name)
  73.     response = webhook.execute()
  74.     if rate_limit(response):
  75.         # repeat the failed request
  76.         failed_file = [(i, file_info) for i, file_info in enumerate(discord_files) if file_info[0] == file_name][0]
  77.         discord_files.insert(failed_file[0] + 1, failed_file[1])
  78.     color.cprint_green(f'{len(discord_files) - counter} files remaining, send {counter} files')
  79.     counter += 1
  80.  
  81. webhook = DiscordWebhook(url=webhook_url, username=username, avatar_url=avatar_url, content='Done')
  82. webhook.execute()
  83.  
Add Comment
Please, Sign In to add comment