CreedWN

bot_longfuncs.py

Jun 29th, 2018
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 20.88 KB | None | 0 0
  1. #SAVE AS: bot_longfuncs.py
  2. #########################################################################################################################################
  3. ###############################################################MODULE IMPORT#############################################################
  4. #########################################################################################################################################
  5. import json
  6. from datetime import datetime
  7. import sys
  8. import os
  9. import base64
  10. import mimetypes
  11. import time
  12. import random
  13. import io
  14. import re
  15. import traceback
  16. import warnings
  17.  
  18. from skimage.measure import compare_ssim as ssim #pip install scikit-image
  19. import cv2 #pip install opencv-python
  20. import discord #pip install -U discord.py[voice]
  21. import asyncio #pip install -U discord.py[voice]
  22. import aiohttp #pip install -U discord.py[voice]
  23. import numpy as np #pip install opencv-python
  24. from discord.ext import commands #pip install -U discord.py[voice]
  25. from googleapiclient.discovery import build #pip install --upgrade google-api-python-client
  26. from apiclient.errors import HttpError #pip install --upgrade google-api-python-client
  27. from oauth2client.tools import argparser #pip install --upgrade oauth2client
  28.  
  29. try:
  30.     from PIL import Image #pip install PIL
  31. except:
  32.     import Image #pip install Image
  33.    
  34. client = discord.Client()
  35. URL_REGEX = r"""(?i)\b((?:https?:(?:/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b/?(?!@)))"""
  36. async def OverflowMessage(message,channel):
  37.     try:
  38.         cummsg = ""
  39.         overflownewline = False
  40.         for i in [x + "\n" for x in message.split("\n")]:
  41.             if len(i) > 1800:
  42.                 overflownewline = True
  43.                 if cummsg != "":
  44.                     await client.send_message(channel, cummsg)
  45.                     message = message.replace(cummsg,"")
  46.                 break
  47.             elif len(cummsg+i) > 1800:
  48.                 await client.send_message(channel, cummsg)
  49.                 message = message.replace(cummsg,"")
  50.                 cummsg = i
  51.             else:
  52.                 cummsg += i
  53.         if overflownewline:
  54.             for i in message:
  55.                 if len(cummsg+i) > 1800:
  56.                     await client.send_message(channel, cummsg)
  57.                     message = message.replace(cummsg,"")
  58.                     cummsg = i
  59.                 else:
  60.                     cummsg += i
  61.             if cummsg != "":
  62.                 await client.send_message(channel, cummsg)
  63.                 cummsg = ""
  64.         else:
  65.             await client.send_message(channel, cummsg)
  66.         return True
  67.     except Exception as e:
  68.         return str(e)
  69. async def IsStaff(message,author=None):
  70.     isstaff = False
  71.     if author == None:
  72.         author = bot.server.get_member(message.author.id)
  73.     else:
  74.         author = bot.server.get_member(author.id)
  75.     staffranks = ["Admin","Legislator","Moderator","Moderators","Gate Keeper"]
  76.     playerroles = author.roles
  77.     for i in playerroles:
  78.         if i.name in staffranks:
  79.             return True
  80.     return False
  81. async def DoCmd(message):
  82.     if not(await IsStaff(message) or message.author.id == "380793206033612809"):
  83.         try:
  84.             await client.delete_message(message)
  85.         except:
  86.             pass
  87.         return False
  88.     return True
  89.    
  90. ##############################################################################################################
  91. ##############################################################################################################
  92. ##########################################START OF !FUNCTIONS#################################################
  93. ##############################################################################################################
  94.  
  95. async def ImageBlacklist(message):
  96.     if message.channel.id in ["413584030928338945","400113786457161728"]:#Sexy Chaos, Chaos
  97.         return
  98.     imgsfound = await FindImages(message)
  99.     if imgsfound == None:
  100.         return
  101.     startimgs = datetime.now()
  102.     for img in imgsfound:
  103.         filename = img.rsplit("/",1)[1]
  104.         if filename.endswith(".gif"):
  105.             continue
  106.         async with aiohttp.ClientSession() as cs:
  107.             async with cs.get(img) as r:
  108.                 try:
  109.                     content = await r.content.read()
  110.                     imgb = Image.open(io.BytesIO(content))
  111.                     imgb.save(filename)
  112.                     original = cv2.imread(filename)
  113.                     try:
  114.                         os.remove(filename)
  115.                     except OSError:
  116.                         pass
  117.                     original = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
  118.                     oheight, owidth = original.shape[:2]
  119.                    
  120.                     for i in os.listdir(os.path.join("blacklist","fat")):
  121.                         if mimetypes.guess_type(i)[0] != None and "image" in mimetypes.guess_type(i)[0]:
  122.                             compare = cv2.imread(os.path.join(os.path.join("blacklist","fat"),i))
  123.                             try:
  124.                                 compare = cv2.cvtColor(compare, cv2.COLOR_BGR2GRAY)
  125.                             except:
  126.                                 print("ERROR WITH FILE: "+i)
  127.                                 continue
  128.                             compare = cv2.resize(compare,(owidth, oheight), interpolation = cv2.INTER_CUBIC)
  129.                             ssim_index = ssim(original, compare, data_range=compare.max() - compare.min())
  130.                             if ssim_index>=0.85:
  131.                                 await client.delete_message(message)
  132.                                 await client.send_message(message.channel,"<@"+message.author.id+">, sorry, but: https://cdn.discordapp.com/attachments/400113786457161728/442566754321825799/unknown.png")
  133.                                 return
  134.                    
  135.                     for i in os.listdir(os.path.join("blacklist","silent")):
  136.                         if mimetypes.guess_type(i)[0] != None and "image" in mimetypes.guess_type(i)[0]:
  137.                             compare = cv2.imread(os.path.join(os.path.join("blacklist","silent"),i))
  138.                             try:
  139.                                 compare = cv2.cvtColor(compare, cv2.COLOR_BGR2GRAY)
  140.                             except:
  141.                                 print("ERROR WITH FILE: "+i)
  142.                                 continue
  143.                             compare = cv2.resize(compare,(owidth, oheight), interpolation = cv2.INTER_CUBIC)
  144.                             ssim_index = ssim(original, compare, data_range=compare.max() - compare.min())
  145.                             if ssim_index>=0.85:
  146.                                 try:
  147.                                     await client.delete_message(message)
  148.                                 except:
  149.                                     pass
  150.                                 return
  151.                 except:
  152.                     print("BLACKLIST FAILURE")
  153.                     print(traceback.format_exc())
  154. async def FindImages(message)
  155.     dl_urls = []
  156.     dled_urls = []
  157.     if len(message.attachments) != 0:
  158.         for att in message.attachments:
  159.             dl_urls.append(att["url"])     
  160.     if len(re.findall(URL_REGEX,message.content)) !=0: #URL
  161.         for urlfound in re.findall(URL_REGEX,message.content):
  162.             dl_urls.append(urlfound)
  163.     for urlfound in dl_urls:
  164.         if mimetypes.guess_type(urlfound)[0] != None and "image" in mimetypes.guess_type(urlfound)[0]:
  165.             dled_urls.append(urlfound)
  166.     if dled_urls == []:
  167.         return None
  168.     else:
  169.         return dled_urls
  170.  
  171. async def BlacklistScan(message,silent=False):
  172.     if not(silent):
  173.         tmp_blacklistscanmsg = await client.send_message(message.channel,"**Scanning chat with new blacklist parameters.**")
  174.     async for scanmsg in client.logs_from(message.channel, limit=99):
  175.         if scanmsg.timestamp != message.timestamp:
  176.             await ImageBlacklist(scanmsg)
  177.     if not(silent):
  178.         await client.delete_message(tmp_blacklistscanmsg)
  179.         tmp_blacklistscanmsg = await client.send_message(message.channel,"**Blacklist scan complete.**")
  180.         await asyncio.sleep(5)
  181.         await client.delete_message(tmp_blacklistscanmsg)
  182. async def BlacklistCMD(message):
  183.     if message.content.lower().startswith(bot.prefix+"fatban"):
  184.         cando = await DoCmd(message)
  185.         if not(cando):
  186.             return
  187.         #cmdmsg = message.content.lower().replace(bot.prefix+"fatban","").strip()
  188.         foundimgs = await FindImages(message)
  189.         if foundimgs == None:
  190.             print("Error, no images found in blacklist updater command")
  191.             return
  192.         successes = 0
  193.         for img in foundimgs:
  194.             filename = img.rsplit("/",1)[1]
  195.             async with aiohttp.ClientSession() as cs:
  196.                 async with cs.get(img) as r:
  197.                     try:
  198.                         content = await r.content.read()
  199.                         imgb = Image.open(io.BytesIO(content))
  200.                         imgb.save(os.path.join("blacklist","fat",datetime.now().strftime("%Y-%b-%d_%Hh%Mm%Ss__")+filename))
  201.                         successes +=1
  202.                     except:
  203.                         print("AddToBlackListFailure")
  204.                         print(traceback.format_exc())
  205.         if successes == len(foundimgs):
  206.             tmp_blacklistmsg = await client.send_message(message.channel,"__Blacklist updated.__")
  207.             await asyncio.sleep(5)
  208.             await client.delete_message(tmp_blacklistmsg)
  209.             await BlacklistScan(message)
  210.         else:
  211.             tmp_blacklistmsg = await client.send_message(message.channel,"__Blacklist updated.__\nError, "+str(successes)+"/"+len(foundimgs))
  212.             await asyncio.sleep(5)
  213.             await client.delete_message(tmp_blacklistmsg)
  214.         try:
  215.             await client.delete_message(message)
  216.         except:
  217.             pass
  218.     elif message.content.lower().startswith(bot.prefix+"hban"):
  219.         cando = await DoCmd(message)
  220.         if not(cando):
  221.             return
  222.         foundimgs = await FindImages(message)
  223.         if foundimgs == None:
  224.             print("Error, no images found in blacklist updater command")
  225.             return
  226.         successes = 0
  227.         for img in foundimgs:
  228.             filename = img.rsplit("/",1)[1]
  229.             async with aiohttp.ClientSession() as cs:
  230.                 async with cs.get(img) as r:
  231.                     try:
  232.                         content = await r.content.read()
  233.                         imgb = Image.open(io.BytesIO(content))
  234.                         imgb.save(os.path.join("blacklist","silent",datetime.now().strftime("%Y-%b-%d_%Hh%Mm%Ss__")+filename))
  235.                         successes +=1
  236.                     except:
  237.                         print("AddToBlackListFailure")
  238.                         print(traceback.format_exc())
  239.         chnl = message.channel
  240.         try:
  241.             await client.delete_message(message)
  242.         except:
  243.             pass
  244.         if successes == len(foundimgs):
  245.             await BlacklistScan(message,True)
  246.         else:
  247.             tmp_blacklistmsg = await client.send_message(message.channel,"__Blacklist updated.__\nError, "+str(successes)+"/"+len(foundimgs))
  248.             await asyncio.sleep(5)
  249.             await client.delete_message(tmp_blacklistmsg)
  250.  
  251.    
  252. async def Purge(message):
  253.     if message.content.lower().startswith(bot.prefix+"nuke"):
  254.         cando = await DoCmd(message)
  255.         if not(cando):
  256.             return
  257.         async for nukemsg in client.logs_from(message.channel, limit=99):
  258.             if nukemsg.author.id == client.user.id:
  259.                 await client.delete_message(nukemsg)
  260.         await client.delete_message(message)
  261. async def PurgeCreed(message):
  262.     if message.content.lower().startswith(bot.prefix+"nukecreed"):
  263.         if message.author.id == "380793206033612809":      
  264.             async for nukemsg in client.logs_from(message.channel, limit=99):
  265.                 if nukemsg.author.id == message.author.id:
  266.                     await client.delete_message(nukemsg)
  267.             await client.delete_message(message)
  268. async def CApprove(message):
  269.     if message.content.lower().startswith(bot.prefix+"capprove"):
  270.         if message.author.id == "380793206033612809":      
  271.             async for nukemsg in client.logs_from(bot.server.get_channel("389552930639839244"), limit=99):
  272.                 if nukemsg.id == message.content.lower().replace(bot.prefix+"capprove ",""):
  273.                     sugstr = nukemsg.content.split(":**__\n")[1].split("\n** **\n** **")[0]
  274.                     sugstr = "** **\n** **\n"+str(bot.emoji_accepted)+"__**Accepted by Creed:**__"+str(bot.emoji_accepted)+"\n"+sugstr
  275.                     pinmsg = await client.send_message(nukemsg.channel, sugstr)
  276.                     try:
  277.                         await client.pin_message(pinmsg)
  278.                     except Exception as e:
  279.                         if "Maximum number of pins reached (50)" in traceback.format_exc():
  280.                             try:
  281.                                 await client.unpin_message(sorted(await client.pins_from(nukemsg.channel),key = lambda msg: msg.timestamp.timestamp())[0])
  282.                                 await client.pin_message(pinmsg)
  283.                             except:
  284.                                 print("Failed to remove oldest pin")
  285.                                 print(traceback.format_exc())
  286.                         else:
  287.                             print("Some misc issue in pinning")
  288.                             print(traceback.format_exc())
  289.                     async for msg in client.logs_from(nukemsg.channel, limit=99):
  290.                         if "pinned a message to this channel" in msg.system_content:
  291.                             try:
  292.                                 await client.delete_message(msg)
  293.                             except:
  294.                                 print("Failed to remove 'user has pinned message to this channel' message")
  295.                                 print(traceback.format_exc())
  296.                     try:
  297.                         await client.delete_message(nukemsg)       
  298.                     except:
  299.                         print("No remove permission")
  300.         await client.delete_message(message)
  301.        
  302. async def CDeny(message):
  303.     if message.content.lower().startswith(bot.prefix+"cdeny"):
  304.         if message.author.id == "380793206033612809":      
  305.             async for nukemsg in client.logs_from(bot.server.get_channel("389552930639839244"), limit=99):
  306.                 if nukemsg.id == message.content.lower().replace(bot.prefix+"cdeny ",""):
  307.                     sugstr = nukemsg.content.split(":**__\n")[1].split("\n** **\n** **")[0]
  308.                     sugstr = "** **\n** **\n"+str(bot.emoji_denied)+"__**Denied by Creed:**__"+str(bot.emoji_denied)+"\n"+sugstr
  309.                     pinmsg = await client.send_message(nukemsg.channel, sugstr)
  310.                     try:
  311.                         await client.pin_message(pinmsg)
  312.                     except Exception as e:
  313.                         if "Maximum number of pins reached (50)" in traceback.format_exc():
  314.                             try:
  315.                                 await client.unpin_message(sorted(await client.pins_from(nukemsg.channel),key = lambda msg: msg.timestamp.timestamp())[0])
  316.                                 await client.pin_message(pinmsg)
  317.                             except:
  318.                                 print("Failed to remove oldest pin")
  319.                                 print(traceback.format_exc())
  320.                         else:
  321.                             print("Some misc issue in pinning")
  322.                             print(traceback.format_exc())
  323.                     async for msg in client.logs_from(nukemsg.channel, limit=99):
  324.                         if "pinned a message to this channel" in msg.system_content:
  325.                             try:
  326.                                 await client.delete_message(msg)
  327.                             except:
  328.                                 print("Failed to remove 'user has pinned message to this channel' message")
  329.                                 print(traceback.format_exc())
  330.                     try:
  331.                         await client.delete_message(nukemsg)       
  332.                     except:
  333.                         print("No remove permission")
  334.         await client.delete_message(message)
  335.  
  336. async def MeganukeCMD(message):
  337.     if message.channel.id == "442782454831382530" and message.content.lower() == bot.prefix+"meganuke":
  338.         if message.author.id != "380793206033612809":
  339.             return
  340.         async for meganukemsg in client.logs_from(message.channel, limit=9999):
  341.             await client.delete_message(meganukemsg)
  342.     if message.content.lower().startswith(bot.prefix+"specnuke"):
  343.         if message.author.id != "380793206033612809":
  344.             return
  345.         chnl = message.channel
  346.         delid = message.content.replace(bot.prefix+"specnuke ","")
  347.         await client.delete_message(message)
  348.         async for meganukemsg in client.logs_from(chnl, limit=999):
  349.             if meganukemsg.id == delid:
  350.                 await client.delete_message(meganukemsg)
  351.                 return
  352.         for listchannel in bot.server.channels:
  353.             try:
  354.                 async for meganukemsg in client.logs_from(listchannel, limit=99):
  355.                     if meganukemsg.id == delid:
  356.                         await client.delete_message(meganukemsg)
  357.                         return
  358.             except:
  359.                 pass
  360.     elif message.content.lower().startswith(bot.prefix+"sugnuke"):
  361.         if message.author.id != "380793206033612809":
  362.             return
  363.         chnl = message.channel
  364.         delid = message.content.replace(bot.prefix+"sugnuke ","")
  365.         await client.delete_message(message)
  366.         for listchannel in bot.server.channels:
  367.             if not(listchannel.id in ["389552930639839244","447760673120976905","433373031013023775"]): #server, mod, staff
  368.                 continue
  369.             try:
  370.                 async for meganukemsg in client.logs_from(listchannel, limit=999):
  371.                     if meganukemsg.id == delid:
  372.                         await client.delete_message(meganukemsg)
  373.                         return
  374.             except:
  375.                 pass
  376.     elif message.channel.id == "442782454831382530" and message.content.lower() == bot.prefix+"secnuke":
  377.         cando = await DoCmd(message)
  378.         if not(cando):
  379.             return
  380.         async for meganukemsg in client.logs_from(message.channel, limit=999):
  381.             if not(meganukemsg.content.startswith("==")):
  382.                 await client.delete_message(meganukemsg)
  383.  
  384. ##############################################################################################################
  385. ##############################################################################################################
  386. ##########################################END OF !FUNCTIONS###################################################
  387. ##############################################################################################################
  388. ##########BOT ON MESSAGE##############
  389. @client.event
  390. async def on_message(message):
  391.     if not bot.ready: #Race condition
  392.         return
  393.     #Skip entirely if its in the ignorelist
  394.     if message.author.id in bot.ignorelist or message.channel.id in bot.ignorelist:
  395.         return
  396.     await ImageBlacklist(message)
  397.     await BlacklistCMD(message)
  398.     await Purge(message)
  399.     await PurgeCreed(message)
  400.     await CApprove(message)
  401.     await CDeny(message)
  402.     await MeganukeCMD(message)
  403. ##########BOT ERROR CATCHING##########
  404. @client.event
  405. async def on_error(event,args="",kwargs=""):
  406.     print("BOT EXCEPTION:")
  407.     print(traceback.format_exc())
  408.     try:
  409.         with open("errors_longfuncs.txt", "a") as f:
  410.             f.write("\n\n"+traceback.format_exc()+"\n\n")
  411.     except:
  412.         try:
  413.             print("ERROR: NO ERRORS FILE, WRITING")
  414.             with open("errors_longfuncs.txt","w") as f:
  415.                 f.write("\n\n"+traceback.format_exc()+"\n\n")
  416.         except:
  417.             print("ERROR: NO FILESYSTEM ACCESS")
  418. ##############BOT INIT################
  419. @client.event
  420. async def on_ready():
  421.     print("--ADVANCED/TIME-INSENSITIVE BOT FUNCTIONS--")
  422.     print('BOT_NAME: ' + client.user.name)
  423.     print('BOT_ID: ' + client.user.id)
  424.     print('\n\n--VAR_ASSIGN--')
  425.     try:
  426.         bot.prefix = bot.config.split("prefix=")[1].split("\n")[0]
  427.         print("BOT_PREFIX: "+bot.prefix)
  428.         bot.ignorelist = bot.config.split("ignorelist=")[1].split("\n")[0]
  429.         print("BOT_IGNORELIST: "+bot.ignorelist)
  430.        
  431.         bot.server = bot.config.split("discord_server=")[1].split("\n")[0]
  432.         print("SERVER_ID: "+bot.server)
  433.         bot.meganuke = ""
  434.     except:
  435.         print("FAILURE TO READ CONFIG")
  436.         print(traceback.format_exc())
  437.         raise Exception('Incorrect config.')
  438.     try:
  439.         print("\n\n--DYNAMIC_VAR_INIT--")
  440.         bot.server = client.get_server(bot.server)
  441.         print("SERVER_NAME: "+bot.server.name)
  442.         for i in bot.server.emojis:
  443.             if i.name == "accepted":
  444.                 bot.emoji_accepted = i
  445.             if i.name == "denied":
  446.                 bot.emoji_denied = i
  447.         print("ADDED_EMOJI: "+bot.emoji_accepted.name)
  448.         print("ADDED_EMOJI: "+bot.emoji_denied.name)   
  449.         bot.ready = True
  450.         print("\n\n--READY--")
  451.         #await DoPurgeReminder()
  452.     except:
  453.         print("CRITICAL ERROR: FAILURE TO ASSIGN CHANNELS")
  454.         client.close()
  455.         client.logout()
  456.         raise Exception("CRITICAL ERROR: FAILURE TO ASSIGN CHANNELS")
  457.    
  458. #############################END OF INITIALIZATION#############################
  459.    
  460. class BotVars:
  461.     pass
  462. if __name__ == '__main__':
  463.     try:
  464.         bot = BotVars()
  465.         bot.ready = False
  466.         #########################################################################################################################################
  467.         ###############################################################VARIABLE INIT#############################################################
  468.         #########################################################################################################################################
  469.         bot.token = None
  470.         print("--TOKEN_INIT--")
  471.         try:
  472.             with open("config", "r") as f:
  473.                 bot.config = f.read()
  474.             bot.token = bot.config.split("token=")[1].split("\n")[0]
  475.             print("DISCORD TOKEN: " + bot.token[:int(len(bot.token)/2)]+str("*"*(int(len(bot.token)/2)-4))+bot.token[:4])
  476.         except:
  477.             print("FAILURE TO READ CONFIG")
  478.             print(traceback.format_exc())
  479.             raise Exception('Incorrect config.')
  480.         print("\n\n--LOGIN--")
  481.         client.run(bot.token)
  482.     except Exception as e:
  483.         botexception = traceback.format_exc()
  484.         print(traceback.format_exc())
  485.         print("EXCEPTION '" + str(e) + "'")
  486.         try:
  487.             client.close()
  488.         except:
  489.             pass
  490.         try:
  491.             client.logout()
  492.         except:
  493.             pass
  494.         with open("exception.txt", "w") as inputfile:
  495.             if "logout" in str(botexception):
  496.                 inputfile.write("logout")
  497.             else:
  498.                 inputfile.write(str(botexception))
  499.         print("--FAILURE--")
  500.         time.sleep(5)
Add Comment
Please, Sign In to add comment