import asyncio import datetime import functools import json import subprocess from collections import namedtuple from datetime import timedelta # 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, randint import discord from discord.ext import commands, tasks # from PIL.Image import core as Image # import image as Image # from PIL import Image, ImageFilter # from selenium import webdriver # from selenium.webdriver.chrome.options import Options # 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, 1100) # 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 self.pins = [] @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: total_eyes = rigged_findseed[ctx.author.id] else: total_eyes = sum(1 for i in range(12) if randint(1, 10) == 1) await ctx.send( f"{discord.utils.escape_mentions(ctx.message.author.display_name)} -> your seed is a {total_eyes} 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_reaction_add(self, reaction, user): if ( reaction.emoji == "⭐" and not reaction.message.id in self.pins and reaction.count >= 5 ): self.pins.append(reaction.message.id) embed = discord.Embed( title="**New Starred Message**", description=reaction.message.content, colour=discord.Colour(0xB92C36), url=reaction.message.jump_url, timestamp=reaction.message.created_at, ) for attachement in reaction.message.attachments: if attachement.height: embed.set_image(url=attachement.url) embed.set_author( name=str(reaction.message.author), icon_url=reaction.message.author.avatar_url_as(format="png"), ) embed.set_footer(text=reaction.message.id) # embed.add_field(name="Stars", value=reaction.count) channel = self.bot.get_channel( int(self.bot.config[str(reaction.message.guild.id)]["pins_channel"]) ) await channel.send(embed=embed) @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: pass @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.author.bot: return if ( "<@!280428276810383370>" in message.content or "<@280428276810383370>" in message.content ): await message.channel.send("<:MangoPing:760286455238361129>") badWords = ("fair", "ⓕⓐⓘⓡ") count = 0 year = datetime.date.today().year CoolKids = namedtuple("CoolKid", ["name", "user", "bday",]) coolKids = ( CoolKids( name="Cameron", user=self.bot.get_user(468262902969663488), bday=datetime.date(year, 10, 8), ), CoolKids( name="Indy", user=self.bot.get_user(274923326890311691), bday=datetime.date(year, 9, 10), ), CoolKids( name="Kai", user=self.bot.get_user(199070670221475842), bday=datetime.date(year, 11, 26), ), CoolKids( name="Luca", user=self.bot.get_user(99457716614885376), bday=datetime.date(year, 11, 5), ), CoolKids( name="Max", user=self.bot.get_user(543958509243596800), bday=datetime.date(year, 11, 10), ), CoolKids( name="Daniel", user=self.bot.get_user(264121998173536256), bday=datetime.date(year, 7, 6), ), # Mistaken CoolKids( name="Jake", user=self.bot.get_user(400344183333847060), bday=datetime.date(year, 11, 10), ), CoolKids( name="Nevaeh", user=self.bot.get_user(744383381843738633), bday=datetime.date(year, 11, 5), ), # Prakxo CoolKids( name="Samantha", user=self.bot.get_user(226312219787264000), bday=datetime.date(year, 6, 24), ), CoolKids( name="Scott", user=self.bot.get_user(223937483774230528), bday=datetime.date(year, 6, 23), ), CoolKids( name="Skye", user=self.bot.get_user(329538915805691905), bday=datetime.date(year, 6, 24), ), CoolKids( name="Thomas", user=self.bot.get_user(280428276810383370), bday=datetime.date(year, 9, 29), ), # Zyemlus CoolKids( name="Samantha", user=self.bot.get_user(536071288859656193), bday=datetime.date(year, 8, 23), ), CoolKids( name="Landen", user=self.bot.get_user(654025117025828885), bday=datetime.date(year, 8, 24), ), CoolKids( name="Oceanlight", user=self.bot.get_user(615658069132836865), bday=datetime.date(year, 4, 9), ), # Shadowfi CoolKids( name="Daniel", user=self.bot.get_user(586664256217415681), bday=datetime.date(year, 11, 14), ), CoolKids( name="Sawyer", user=self.bot.get_user(404873210597867541), bday=datetime.date(year, 9, 12), ), CoolKids( name="Marco", user=self.bot.get_user(299668599650648065), bday=datetime.date(year, 11, 12), ), CoolKids( name="Tyler", user=self.bot.get_user(619322461749641246), bday=datetime.date(year, 3, 4), ), CoolKids( name="Avery", user=self.bot.get_user(538824552906489874), bday=datetime.date(year, 10, 16), ), CoolKids( name="Matthew", user=self.bot.get_user(525365553842356225), bday=datetime.date(year, 1, 2), ), CoolKids( name="Samuel", user=self.bot.get_user(615235547920597150), bday=datetime.date(year, 12, 13), ), ) for kid in coolKids: if datetime.date.today() == kid.bday: try: for i in range(self.tries): await kid.user.send( f"Happy Birthday {kid.name}! You're a boomer now! <:mangopog:730683234039365722>" ) self.tries = 1 except: self.tries += 1 for word in badWords: if word in message.content.lower().replace(" ", ""): count += 1 fair = "Fair " * count try: await message.channel.send(fair) except UnboundLocalError: pass @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/" ) @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 = ", ".join([*commands]) await ctx.send(f"```List of custom commands:\n{output}```") # @commands.command(aliases=["calc"]) # async def math(self, ctx, *, eqn: str): # try: # # Allow for proper absolute value notation # pipes = eqn.count("|") # eqn = eqn.replace("|", "abs(", pipes // 2).replace("|", ")", pipes // 2) # # result = subprocess.check_output( # f"echo 'scale = 10; {eqn}' | bc bc_funcs/*", shell=True # ) # await ctx.send(result.decode("utf-8").replace("\\\n", "").strip()) # except subprocess.CalledProcessError as err: # print(err) # await ctx.send("Something went wrong") @commands.command() async def retime(self, ctx, start_sec, end_sec, frames=0, framerate=30): """Retimes a run using the start/end timestamps, leftover frames, and framerate""" if start_sec.count(":") == 2: start_sec = sum( x * int(t) for x, t in zip([3600, 60, 1], start_sec.split(":")) ) elif start_sec.count(":") == 1: start_sec = sum(x * int(t) for x, t in zip([60, 1], start_sec.split(":"))) else: start_sec = int(start_sec) if end_sec.count(":") == 2: end_sec = sum(x * int(t) for x, t in zip([3600, 60, 1], end_sec.split(":"))) elif end_sec.count(":") == 1: end_sec = sum(x * int(t) for x, t in zip([60, 1], end_sec.split(":"))) else: end_sec = int(end_sec) await ctx.send( str( timedelta( seconds=end_sec - start_sec + round((int(frames) / int(framerate)), 3) ) ).replace("000", "") ) def setup(bot): bot.add_cog(Utils(bot))