from discord.ext import commands from discord.ext import tasks import discord import json import datetime # forgot to import this and ended up looking mentally unstable # troll literally pointed out atleast 4 things I did wrong in 3 lines of code from random import choice from random import randint from datetime import timedelta from selenium import webdriver from selenium.webdriver.chrome.options import Options #from PIL.Image import core as Image #import image as Image from PIL import Image from PIL import ImageFilter import functools def set_viewport_size(driver, width, height): window_size = driver.execute_script(""" return [window.outerWidth - window.innerWidth + arguments[0], window.outerHeight - window.innerHeight + arguments[1]]; """, width, height) driver.set_window_size(*window_size) async def reportStuff(self, ctx, message): channel = self.bot.get_channel(int(self.bot.config[str(ctx.message.guild.id)]["report_channel"])) embed = discord.Embed( title=f"Report from {ctx.message.author}", description=f"{message}", color=ctx.message.author.color, timestamp=ctx.message.created_at) await channel.send(embed=embed) await ctx.author.send("Report has been submitted") def save_leaderboard(): DRIVER = '/usr/lib/chromium-browser/chromedriver' chrome_options = Options() chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--headless") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-gpu") #chrome_options.binary_location = "" driver = webdriver.Chrome(DRIVER, chrome_options=chrome_options) set_viewport_size(driver, 1000, 1000) driver.get('https://aninternettroll.github.io/mcbeVerifierLeaderboard/') screenshot = driver.find_element_by_id('table').screenshot('leaderboard.png') driver.quit() #transparency time img = Image.open('leaderboard.png') img = img.convert("RGB") pallette = Image.open("palette.png") pallette = pallette.convert("P") img = img.quantize(colors=256, method=3, kmeans=0, palette=pallette) img = img.convert("RGBA") datas = img.getdata() newData = [] for item in datas: if item[0] == 255 and item[1] == 255 and item[2] == 255: newData.append((255, 255, 255, 0)) else: newData.append(item) img.putdata(newData) """ img = img.filter(ImageFilter.SHARPEN) img = img.filter(ImageFilter.SHARPEN) img = img.filter(ImageFilter.SHARPEN) """ #height, width = img.size #img = img.resize((height*10,width*10), resample=Image.BOX) img.save("leaderboard.png", "PNG") class Utils(commands.Cog): def __init__(self, bot): self.bot = bot self.tries = 1 @commands.command(description="Pong!", help="Tells the ping of the bot to the discord servers", brief="Tells the ping") async def ping(self, ctx): await ctx.send(f'Pong! {round(self.bot.latency*1000)}ms') @commands.cooldown(1, 25, commands.BucketType.guild) @commands.command() async def findseed(self, ctx): """Test your luck""" if ctx.message.channel.id != int(self.bot.config[str(ctx.message.guild.id)]["bot_channel"]): await ctx.message.delete() ctx.command.reset_cooldown(ctx) return # Don't ask rigged_findseed = { 280428276810383370: 12, # Thomas's User ID 199070670221475842: -1, # Kai's User ID 615658069132836865: -12 # What a fraud! They didn't use their real name. } if ctx.author.id in rigged_findseed: totalEyes = rigged_findseed[ctx.author.id] else: totalEyes = 0 for i in range(12): randomness = randint(1, 10) if randomness <= 1: totalEyes += 1 await ctx.send(f"{discord.utils.escape_mentions(ctx.message.author.display_name)} -> your seed is a {totalEyes} eye") @findseed.error async def findseed_handler(self,ctx,error): if isinstance(error, commands.CommandOnCooldown): if ctx.message.channel.id != int(self.bot.config[str(ctx.message.guild.id)]["bot_channel"]): ctx.command.reset_cooldown(ctx) await ctx.message.delete() return else: await ctx.send(error) #await ctx.send(f"{discord.utils.escape_mentions(ctx.message.author.display_name)}, you have to wait {round(error.retry_after, 7)} seconds before using this again.") @commands.command() async def findsleep(self, ctx): """Test your sleep""" if ctx.message.channel.id != int(self.bot.config[str(ctx.message.guild.id)]["bot_channel"]): await ctx.message.delete() return # DON'T ASK! lessSleepMsg = [ "gn, insomniac!", "counting sheep didn't work? try counting chloroform vials!", "try a glass of water", "some decaf coffee might do the trick!" ] moreSleepMsg = [ "waaakeee uuuppp!", "are they dead or asleep? I can't tell.", "wake up, muffin head", "psst... coffeeee \\:D" ] # Optional TODO: Create non-normal distribution sleepHrs = randint(0, 24) # Add extra comment based on number of sleepHrs if sleepHrs == 0: await ctx.send(f"{discord.utils.escape_mentions(ctx.message.author.display_name)} -> your sleep is 0 hours long - nice try \:D") elif sleepHrs <= 5: if sleepHrs == 1: s = '' else: s = 's' await ctx.send(f"{discord.utils.escape_mentions(ctx.message.author.display_name)} -> your sleep is {sleepHrs} hour{s} long - {lessSleepMsg[randint(0, len(lessSleepMsg) - 1)]}") else: await ctx.send(f"{discord.utils.escape_mentions(ctx.message.author.display_name)} -> your sleep is {sleepHrs} hours long - {moreSleepMsg[randint(0, len(moreSleepMsg) - 1)]}") @commands.Cog.listener() async def on_member_join(self, member): if member.id == 640933433215811634: await member.edit(nick="JoetheSheepFucker") def check(msg): return msg.author == member and msg.type != discord.MessageType.new_member try: msg = await self.bot.wait_for("message", check=check, timeout=300) await msg.channel.send("<:PeepoPog:732172337956257872>") except asyncio.TimeoutError: await msg.channel.send("<:pepesadcrash:739927552260440185>") @commands.Cog.listener() async def on_member_update(self, before, after): if after.id == 640933433215811634: await after.edit(nick="JoetheSheepFucker") @commands.Cog.listener() async def on_message(self, message): if not message.guild: return if message.channel.id != int(self.bot.config[str(message.guild.id)]["fair_channel"]): return if message.author.bot: return badWords = ["fair", "ⓕⓐⓘⓡ"] count = 0 coolKids = [ ['Cameron', self.bot.get_user(468262902969663488), datetime.date(2020, 10, 8)], ['Indy', self.bot.get_user(274923326890311691), datetime.date(2020, 9, 10)], ['Kai', self.bot.get_user(199070670221475842), datetime.date(2020, 11, 20)], ['Luca', self.bot.get_user(99457716614885376), datetime.date(2020, 11, 5)], ['Max', self.bot.get_user(543958509243596800), datetime.date(2020, 11, 10)], ['Mistaken', self.bot.get_user(264121998173536256), datetime.date(2020, 7, 6)], ['Murray', self.bot.get_user(400344183333847060), datetime.date(2020, 11, 10)], ['RKREE', self.bot.get_user(395872198323077121), datetime.date(2020, 11, 5)], # idk if she goes by her irl name but I'm sticking with it for the sake of uniformity # also idk how to pronounce prakxo ['Samantha', self.bot.get_user(226312219787264000), datetime.date(2020, 6, 24)], ['Scott', self.bot.get_user(223937483774230528), datetime.date(2020, 6, 23)], ['Sky', self.bot.get_user(329538915805691905), datetime.date(2020, 6, 24)], ['Thomas', self.bot.get_user(280428276810383370), datetime.date(2020, 9, 29)], ['Samantha', self.bot.get_user(536071288859656193), datetime.date(2020, 8, 23)], ['Landen', self.bot.get_user(654025117025828885), datetime.date(2020, 8, 25)] ] for coolKid in coolKids: if datetime.date.today() == coolKid[2]: try: for i in range(self.tries): await coolKid[1].send(f'Happy Birthday {coolKid[0]}! You\'re a boomer now! :mango:') self.tries = 1 except: self.tries +=1 for word in badWords: if word in message.content.lower().replace(" ", ""): count += 1; fair = 'Fair '*count await message.channel.send(fair) @commands.cooldown(1, 60, commands.BucketType.member) @commands.command() async def report(self, ctx, *, message=None): """Send a message to the super mods about anything""" if ctx.message.guild != None: await ctx.message.delete() if message == None: await ctx.message.author.send("Please type a report to report (hehe, sounds funny)") else: await reportStuff(self, ctx, message) @commands.cooldown(1, 20, commands.BucketType.guild) @commands.command() async def leaderboard(self, ctx): """Leaderboard of the people that matter""" async with ctx.typing(): try: lbFunc = functools.partial(save_leaderboard) await self.bot.loop.run_in_executor(None, lbFunc) await ctx.send(file=discord.File("leaderboard.png")) except: await ctx.send("https://aninternettroll.github.io/mcbeVerifierLeaderboard/") @leaderboard.error async def leaderboard_handler(self,ctx,error): if isinstance(error, commands.CommandOnCooldown): #return await ctx.send(f"{discord.utils.escape_mentions(ctx.message.author.display_name)}, you have to wait {round(error.retry_after, 2)} seconds before using this again.") @commands.cooldown(1, 60, commands.BucketType.guild) @commands.command() async def someone(self, ctx): """Discord's mistake""" if ctx.channel.id != int(self.bot.config[str(ctx.message.guild.id)]["fair_channel"]): await ctx.send(choice(ctx.guild.members).mention) @commands.command() async def roll(self, ctx, pool): """Roll the dice""" await ctx.send(f"You rolled a {randint(0, int(pool))}") @commands.command(aliases=['commands', 'allcommands']) async def listcommands(self, ctx): """List all custom commands""" with open('custom_commands.json', 'r') as f: commands = json.load(f) output = '```List of custom commands:\n' for key in commands: output += f'{key}, ' output += '```' await ctx.send(output) def setup(bot): bot.add_cog(Utils(bot))