import os import json import checks import random import aiohttp import discord import requests from discord.ext.commands import bot class Util(): """ A cog that offers utility commands. """ def __init__(self, Bot): self.bot = Bot @bot.command(pass_context=True) async def avatar(self, ctx, *,user: discord.User = None): """ Returns a mentioned users avatar Example: {command_prefix}avatar @RoxBot#4170 {command_prefix}avatar RoxBot """ if not user: user = ctx.message.author url = user.avatar_url avaimg = 'avaimg.webp' async with aiohttp.ClientSession() as session: async with session.get(url) as img: with open(avaimg, 'wb') as f: f.write(await img.read()) await self.bot.send_file(ctx.message.channel, avaimg) os.remove(avaimg) @bot.command(pass_context=True) async def info(self, ctx, member: discord.Member = None): """ Gets info for a mentioned user Example: {command_prefix}info @RoxBot#4170 {command_prefix}info RoxBot """ if not member: member = ctx.message.author name_disc = member.name + "#" + member.discriminator if member.game: if member.game.type: game = "**" + member.game.name + "**" desc = "Streaming " else: game = "**" + member.game.name + "**" desc = "Playing " else: desc = "" game = "" colour = member.colour.value avatar = member.avatar_url embed = discord.Embed(colour=colour, description=desc+game) embed.set_thumbnail(url=avatar) embed.set_author(name=name_disc, icon_url=avatar) embed.add_field(name="ID", value=member.id) embed.add_field(name="Status", value=member.status) if member.nick: embed.add_field(name="Nickname", value=member.nick) embed.add_field(name="Account Created", value="{:%a %Y/%m/%d %H:%M:%S} UTC".format(member.created_at), inline=True) embed.add_field(name="Joined Server", value="{:%a %Y/%m/%d %H:%M:%S} UTC".format(member.joined_at), inline=True) roles = "" count = 0 for role in member.roles: if role == ctx.message.server.default_role: pass else: roles += role.name + ", " count += 1 if not roles: roles = "None" count = 0 embed.add_field(name="Roles [{}]".format(count), value=roles.strip(", ")) return await self.bot.say(embed=embed) @bot.command(pass_context=True) async def upload(self, ctx): """ Uploads selected file to the host, thanks to the fact that every pomf.se based site has pretty much the same architecture. """ sites = [ "https://comfy.moe/", "https://safe.moe/api/", "http://up.che.moe/", "https://mixtape.moe/", "https://pomf.cat/", "https://sugoi.vidyagam.es/", "https://doko.moe/", "https://pomfe.co/", "https://pomf.space/", "https://vidga.me/", "https://pomf.pyonpyon.moe/" ] # List of pomf clone sites and upload limits await self.bot.send_typing(ctx.message.channel) if ctx.message.attachments: # Site choice, shouldn't need an upload size check since max upload for discord atm is 50MB site = random.choice(sites) urls = [] for attachment in ctx.message.attachments: name = attachment['url'].split("/")[-1] # Download File with aiohttp.ClientSession() as session: async with session.get(attachment['url']) as img: with open(name, 'wb') as f: f.write(await img.read()) # Upload file try: with open(name, 'rb') as f: answer = requests.post(url=site+"upload.php",files={'files[]': f.read()}) response = json.loads(answer.text) file_name_1 = response["files"][0]["url"].replace("\\", "") urls.append(file_name_1) except Exception as e: print(e) print(name + ' couldn\'t be uploaded to ' + site) os.remove(name) msg = "".join(urls) return await self.bot.say(msg) else: return await self.bot.say("Send me shit to upload nig") @bot.command(pass_context=True, aliases=["emoji"]) # This command will only work with normal emoji once I can put in something to get the svgs for twiemoji and convert em async def emote(self, ctx, emote): """ Uploads the emote given. Useful for downloading emotes. ONLY WORKS WITH CUSTOM EMOJI """ emoteid = emote.split(":")[-1].strip("<>") if not emoteid.isdigit(): return await self.bot.say("This command only works with custom emotes.") url = "https://discordapp.com/api/emojis/{}.png".format(emoteid) imgname = 'img.png' async with aiohttp.ClientSession() as session: async with session.get(url) as img: with open(imgname, 'wb') as f: f.write(await img.read()) await self.bot.send_file(ctx.message.channel, imgname) os.remove(imgname) #return await self.bot.say(url) @bot.command(pass_context=True, enabled=False, hidden=True) @checks.is_bot_owner() async def emoterob(self, ctx, emote, name=None): """ Gets a emoji and adds it to the custom emoji list. ONLY WORKS WITH CUSTOM EMOJI """ emoteid = emote.split(":")[-1].strip("<>") if not emoteid.isdigit(): return await self.bot.say("This command only works with custom emotes.") url = "https://discordapp.com/api/emojis/{}.png".format(emoteid) imgname = 'img.png' async with aiohttp.ClientSession() as session: async with session.get(url) as img: with open(imgname, 'wb') as f: f.write(await img.read()) with open(imgname, "rb") as f: return await self.bot.create_custom_emoji(ctx.message.server, name=name, image=f) @bot.command(pass_context=True, hidden=True) @checks.is_bot_owner() async def echo(self, ctx, channel, *, message: str): if ctx.message.channel_mentions: for channel in ctx.message.channel_mentions: await self.bot.send_message(channel, content=message) return await self.bot.say(":point_left:") elif channel.isdigit(): channel = ctx.message.server.get_channel(channel) await self.bot.send_message(channel, content=message) return await self.bot.say(":point_left:") else: return await self.bot.say("You did something wrong smh") @bot.command(pass_context=True, enabled=False, hidden=True) async def say(self, ctx, *, echo): return await self.bot.say(echo) def setup(Bot): Bot.add_cog(Util(Bot))