From 8a3ffa4516cb77a9bb88202ad48a130cf427fffe Mon Sep 17 00:00:00 2001 From: bobloy Date: Mon, 15 Oct 2018 13:57:55 -0400 Subject: [PATCH] StealEmoji properly handle Emojis not having the `__dict__` attribute Start fix for emoiji vs animated max error --- stealemoji/stealemoji.py | 66 +++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/stealemoji/stealemoji.py b/stealemoji/stealemoji.py index 2a16bc4..b970a56 100644 --- a/stealemoji/stealemoji.py +++ b/stealemoji/stealemoji.py @@ -15,6 +15,19 @@ async def fetch_img(session, url): return await response.read() +async def check_guild(guild, emoji): + if len(guild.emojis) >= 100: + return False + + if len(guild.emojis) < 50: + return True + + if emoji.animated: + return sum(e.animated for e in guild.emojis) < 50 + else: + return sum(not e.animated for e in guild.emojis) < 50 + + class StealEmoji(Cog): """ This cog steals emojis and creates servers for them @@ -23,11 +36,11 @@ class StealEmoji(Cog): default_stolemoji = { "guildbank": None, "name": None, - "require_colons": False, - "managed": False, + "require_colons": None, + "managed": None, "guild_id": None, "url": None, - "animated": False, + "animated": None, } def __init__(self, red: Red): @@ -55,10 +68,6 @@ class StealEmoji(Cog): @stealemoji.command(name="bank") async def se_bank(self, ctx): """Add current server as emoji bank""" - await ctx.send( - "This will upload custom emojis to this server\n" - "Are you sure you want to make the current server an emoji bank? (y//n)" - ) def check(m): return ( @@ -67,16 +76,35 @@ class StealEmoji(Cog): and m.author == ctx.author ) + already_a_guildbank = ctx.guild.id in (await self.config.guildbanks()) + + if already_a_guildbank: + await ctx.send( + "This is already an emoji bank\n" + "Are you sure you want to remove the current server from the emoji bank list? (y/n)" + ) + else: + await ctx.send( + "This will upload custom emojis to this server\n" + "Are you sure you want to make the current server an emoji bank? (y/n)" + ) + msg = await self.bot.wait_for("message", check=check) - if msg.content in ["N", "NO"]: + if msg.content.upper() in ["N", "NO"]: await ctx.send("Cancelled") return async with self.config.guildbanks() as guildbanks: - guildbanks.append(ctx.guild.id) + if already_a_guildbank: + guildbanks.remove(ctx.guild.id) + else: + guildbanks.append(ctx.guild.id) - await ctx.send("This server has been added as an emoji bank") + if already_a_guildbank: + await ctx.send("This server has been removed from being an emoji bank") + else: + await ctx.send("This server has been added to be an emoji bank") async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User): """Event handler for reaction watching""" @@ -88,7 +116,7 @@ class StealEmoji(Cog): print("Collecting is off") return - emoji = reaction.emoji + emoji: discord.Emoji = reaction.emoji if emoji in self.bot.emojis: print("Emoji already in bot.emojis") return @@ -99,8 +127,9 @@ class StealEmoji(Cog): guildbank = None banklist = await self.config.guildbanks() for guild_id in banklist: - guild = self.bot.get_guild(guild_id) - if len(guild.emojis) < 50: + guild: discord.Guild = self.bot.get_guild(guild_id) + # if len(guild.emojis) < 50: + if await check_guild(guild, emoji): guildbank = guild break @@ -144,11 +173,14 @@ class StealEmoji(Cog): # If you get this far, YOU DID IT save_dict = self.default_stolemoji.copy() - e_dict = vars(emoji) + e_attr_list = [a for a in dir(emoji) if not a.startswith("__")] + + for k in save_dict.keys(): + save_dict[k] = getattr(emoji, k, None) - for k in e_dict: - if k in save_dict: - save_dict[k] = e_dict[k] + # for k in e_attr_list: + # if k in save_dict: + # save_dict[k] = getattr(emoji, k, None) save_dict["guildbank"] = guildbank.id