Suppenbiatch

send all files from a folder to discord

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