async def unfreeze_message(self, ctx: commands.Context, message_link: converters.MessageLink) -> None: """Unfreezes a message""" orig_message = await starboard_funcs.orig_message( self.bot, message_link.id) if not orig_message: raise errors.DoesNotExist("I can't unfreeze that messsage because " "it does not exist in the database.") await utility_funcs.handle_freezing(self.bot, orig_message["id"], orig_message["guild_id"], False) await ctx.send("Message unfrozen")
async def freeze_message(self, ctx: commands.Context, message_link: converters.MessageLink) -> None: """Freezes a message, so the point count will not update.""" orig_message = await starboard_funcs.orig_message( self.bot, message_link.id) if not orig_message: raise errors.DoesNotExist("I couldn't freeze the message because " "it does not exist in the database.") await utility_funcs.handle_freezing(self.bot, orig_message["id"], orig_message["guild_id"], True) await ctx.send("Message frozen")
async def message_info(self, ctx: commands.Context, message: converters.MessageLink) -> None: """Shows useful info on a message.""" orig = await starboard_funcs.orig_message(self.bot, message.id) if not orig: raise errors.DoesNotExist( "That message does not exist in the database.") jump = utils.jump_link(orig["id"], orig["channel_id"], orig["guild_id"]) embed = discord.Embed( title="Message Info", color=self.bot.theme_color, description=( f"[Jump to Message]({jump})\n" f"Channel: <#{orig['channel_id']}>\n" f"ID: {orig['id']} (`{orig['channel_id']}-{orig['id']}`)\n" f"Author: <@{orig['author_id']}> | `{orig['author_id']}`\n" f"Trashed: {orig['trashed']}"), ) for s in await self.bot.db.get_starboards(ctx.guild.id): s_obj = ctx.guild.get_channel(int(s["id"])) if not s_obj: continue sb_message = await self.bot.db.fetchrow( """SELECT * FROM starboard_messages WHERE orig_id=$1 AND starboard_id=$2""", orig["id"], s["id"], ) if not sb_message: jump = "Not On Starboard" points = 0 forced = False else: _jump = utils.jump_link( sb_message["id"], sb_message["starboard_id"], orig["guild_id"], ) jump = f"[Jump]({_jump})" points = sb_message["points"] forced = s["id"] in orig["forced"] embed.add_field( name=s_obj.name, value=(f"<#{s['id']}>: {jump}\nPoints: {s['required_remove']}" f"/**{points}**/{s['required']}\nForced: {forced}"), ) await ctx.send(embed=embed)
async def untrash_message(self, ctx: commands.Context, message_link: converters.MessageLink) -> None: """Untrashes a message for all starboards""" orig_sql_message = await starboard_funcs.orig_message( self.bot, message_link.id) if not orig_sql_message: raise errors.DoesNotExist( "That message does not exist in the database.") await utility_funcs.handle_trashing( self.bot, orig_sql_message["id"], orig_sql_message["guild_id"], False, ) await ctx.send("Message untrashed")
async def enable_command( self, ctx: commands.Context, command: converters.Command ) -> None: """Enables a command""" guild = await self.bot.db.get_guild(ctx.guild.id) name = command.qualified_name new_commands = guild["disabled_commands"] if name not in new_commands: raise errors.DoesNotExist("That command is not disabled") new_commands.remove(name) await self.bot.db.execute( """UPDATE guilds SET disabled_commands=$1::text[] WHERE id=$2""", new_commands, ctx.guild.id, ) await ctx.send(f"Enabled `{name}`")
async def trash_message(self, ctx: commands.Context, message_link: converters.MessageLink) -> None: """Trashes a message for all starboards. A trashed message cannot be starred, added to more starboards, or be viewed on any of the current starboards.""" orig_sql_message = await starboard_funcs.orig_message( self.bot, message_link.id) if not orig_sql_message: raise errors.DoesNotExist( "That message has not been starred, so I " "can't trash it.") await utility_funcs.handle_trashing( self.bot, orig_sql_message["id"], orig_sql_message["guild_id"], True, ) await ctx.send("Message trashed")
async def remove_prefix(self, ctx: commands.Context, prefix: str) -> None: """Removes a prefix""" to_remove = prefix guild = await self.bot.db.get_guild(ctx.guild.id) if prefix not in guild["prefixes"]: matches = 0 match = None for p in guild["prefixes"]: if p.startswith(prefix): matches += 1 match = p if matches > 1: raise discord.InvalidArgument( f"I found {matches} matches for `{prefix}`. " "Please be more specific." ) elif not match: raise errors.DoesNotExist(f"No matches found for `{prefix}`") else: await ctx.send( f"Did you want to remove `{match}` " "from the prefixes?" ) if not await utils.confirm(ctx): await ctx.send("Cancelled") return to_remove = match new_prefixes = guild["prefixes"] new_prefixes.remove(to_remove) await self.bot.db.execute( """UPDATE guilds SET prefixes=$1 WHERE id=$2""", new_prefixes, ctx.guild.id, ) await ctx.send(f"Removed `{to_remove}` from the prefixes.")