Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

157 lines
4.6KB

  1. import os
  2. import json
  3. import checks
  4. import random
  5. import aiohttp
  6. import discord
  7. import requests
  8. from discord.ext.commands import bot
  9. class Util():
  10. """
  11. A cog that offers utility commands.
  12. """
  13. def __init__(self, Bot):
  14. self.bot = Bot
  15. @bot.command(pass_context=True)
  16. async def avatar(self, ctx, user: discord.User = None):
  17. """
  18. Returns a mentioned users avatar
  19. Example:
  20. {command_prefix}avatar @RoxBot#4170
  21. {command_prefix}avatar RoxBot
  22. """
  23. if ctx.message.mentions:
  24. user = ctx.message.mentions[0]
  25. elif not user:
  26. user = ctx.message.author
  27. url = user.avatar_url
  28. avaimg = 'avaimg.webp'
  29. async with aiohttp.ClientSession() as session:
  30. async with session.get(url) as img:
  31. with open(avaimg, 'wb') as f:
  32. f.write(await img.read())
  33. await self.bot.send_file(ctx.message.channel, avaimg)
  34. os.remove(avaimg)
  35. @bot.command(pass_context=True)
  36. async def info(self, ctx, member: discord.Member = None):
  37. """
  38. Gets info for a mentioned user
  39. Example:
  40. {command_prefix}info @RoxBot#4170
  41. {command_prefix}info RoxBot
  42. """
  43. if not member:
  44. member = ctx.message.author
  45. name_disc = member.name + "#" + member.discriminator
  46. if member.game:
  47. if member.game.type:
  48. game = "**" + member.game.name + "**"
  49. desc = "Streaming "
  50. else:
  51. game = "**" + member.game.name + "**"
  52. desc = "Playing "
  53. else:
  54. desc = ""
  55. game = ""
  56. colour = member.colour.value
  57. avatar = member.avatar_url
  58. embed = discord.Embed(colour=colour, description=desc+game)
  59. embed.set_thumbnail(url=avatar)
  60. embed.set_author(name=name_disc, icon_url=avatar)
  61. embed.add_field(name="ID", value=member.id)
  62. embed.add_field(name="Status", value=member.status)
  63. if member.nick:
  64. embed.add_field(name="Nickname", value=member.nick)
  65. embed.add_field(name="Account Created", value="{:%a %Y/%m/%d %H:%M:%S} UTC".format(member.created_at), inline=True)
  66. embed.add_field(name="Joined Server", value="{:%a %Y/%m/%d %H:%M:%S} UTC".format(member.joined_at), inline=True)
  67. roles = ""
  68. count = 0
  69. for role in member.roles:
  70. if role == ctx.message.server.default_role:
  71. pass
  72. else:
  73. roles += role.name + ", "
  74. count += 1
  75. embed.add_field(name="Roles [{}]".format(count), value=roles.strip(", "))
  76. return await self.bot.say(embed=embed)
  77. @bot.command(pass_context=True)
  78. async def upload(self, ctx):
  79. """
  80. Uploads selected file to the host, thanks to the fact that
  81. every pomf.se based site has pretty much the same architecture.
  82. """
  83. sites = [
  84. "https://comfy.moe/",
  85. "https://safe.moe/api/",
  86. "http://up.che.moe/",
  87. "https://mixtape.moe/",
  88. "https://pomf.cat/",
  89. "https://sugoi.vidyagam.es/",
  90. "https://doko.moe/",
  91. "https://pomfe.co/",
  92. "https://pomf.space/",
  93. "https://vidga.me/",
  94. "https://pomf.pyonpyon.moe/"
  95. ] # List of pomf clone sites and upload limits
  96. await self.bot.send_typing(ctx.message.channel)
  97. if ctx.message.attachments:
  98. # Site choice, shouldn't need an upload size check since max upload for discord atm is 50MB
  99. site = random.choice(sites)
  100. urls = []
  101. for attachment in ctx.message.attachments:
  102. name = attachment['url'].split("/")[-1]
  103. # Download File
  104. with aiohttp.ClientSession() as session:
  105. async with session.get(attachment['url']) as img:
  106. with open(name, 'wb') as f:
  107. f.write(await img.read())
  108. # Upload file
  109. try:
  110. with open(name, 'rb') as f:
  111. answer = requests.post(url=site+"upload.php",files={'files[]': f.read()})
  112. response = json.loads(answer.text)
  113. file_name_1 = response["files"][0]["url"].replace("\\", "")
  114. urls.append(file_name_1)
  115. except Exception as e:
  116. print(e)
  117. print(name + ' couldn\'t be uploaded to ' + site)
  118. os.remove(name)
  119. msg = "".join(urls)
  120. return await self.bot.say(msg)
  121. else:
  122. return await self.bot.say("Send me shit to upload nig")
  123. @bot.command(pass_context=True)
  124. async def emote(self, ctx, emote):
  125. emoteid = emote.split(":")[-1].strip("<>")
  126. url = "https://discordapp.com/api/emojis/{}.png".format(emoteid)
  127. return await self.bot.say(url)
  128. @bot.command(pass_context=True, hidden=True)
  129. @checks.is_bot_owner()
  130. async def echo(self, ctx, channel, *, message: str):
  131. if ctx.message.channel_mentions:
  132. for channel in ctx.message.channel_mentions:
  133. await self.bot.send_message(channel, content=message)
  134. return await self.bot.say(":point_left:")
  135. elif channel.isdigit():
  136. channel = ctx.message.server.get_channel(channel)
  137. await self.bot.send_message(channel, content=message)
  138. return await self.bot.say(":point_left:")
  139. else:
  140. return await self.bot.say("You did something wrong smh")
  141. def setup(Bot):
  142. Bot.add_cog(Util(Bot))