diff --git a/confession/__init__.py b/confession/__init__.py new file mode 100644 index 0000000..c360d10 --- /dev/null +++ b/confession/__init__.py @@ -0,0 +1,6 @@ +from .confession import Confession + + +def setup(bot): + n = Confession() + bot.add_cog(n) diff --git a/confession/confession.py b/confession/confession.py new file mode 100644 index 0000000..080360f --- /dev/null +++ b/confession/confession.py @@ -0,0 +1,118 @@ +from redbot.core import commands, checks, Config +from redbot.core.utils.predicates import ReactionPredicate, MessagePredicate +from redbot.core.utils.menus import DEFAULT_CONTROLS, menu +import contextlib +import discord + + +BaseCog = getattr(commands, "Cog", object) + +class Confession(BaseCog): + + def __init__(self): + self.config = Config.get_conf(self, identifier=665235) + default_guild = {"confession_room": ""} + self.config.register_guild(**default_guild) + + @commands.command() + @checks.admin_or_permissions(manage_guild=True) + async def confessionset(self, ctx, *, channel: discord.TextChannel): + """Set a confession room""" + + rooms = await self.config.guild(ctx.guild).confession_rooms() + + if channel is None: + return await ctx.send("No channel mentioned.") + + await self.config.guild(ctx.guild).confession_rooms.set(channel.id) + await ctx.send("The room has been set.") + + @commands.command() + @checks.admin_or_permissions(manage_guild=True) + async def confessionunset(self, ctx): + """Unset a confession room""" + + rooms = await self.config.guild(ctx.guild).confession_rooms() + + await self.config.guild(ctx.guild).confession_rooms.set("") + await ctx.send("The room has been unset.") + + @commands.command() + async def confess(self, ctx, *, confession: str): + """Confess your dirty sins + + It'll ask you which guild to confess in if you have more than one with a confession + """ + + async def select_guild(ctx: commands.Context, pages: list, controls: dict, message: discord.Message, page: int, timeout: float, emoji: str): + # Clean up + with contextlib.suppress(discord.NotFound): + await message.delete() + # Send it off to this function so it sends to initiate search after selecting subdomain + await self.selected_guild(ctx, user_guilds, confession, page) + return None + + if bool(ctx.guild): + await ctx.send("You should do this in DMs!") + try : + await ctx.message.delete() + except: + pass + return + + all_guilds = ctx.bot.guilds + user_guilds = [] + for guild in all_guilds: + if guild.get_member(ctx.message.author.id): + room = await self.config.guild(guild).confession_rooms() + if room is not None: + user_guilds.append(guild) + + if len(user_guilds) == 0: + await ctx.author.send("No server with a confession room, ask your server owners to set it up!") + if len(user_guilds) == 1: + await self.send_confession(ctx, user_guilds[0], confession) + else: + SELECT_DOMAIN = {"\N{WHITE HEAVY CHECK MARK}": select_guild} + + # Create dict for controls used by menu + SELECT_CONTROLS = {} + SELECT_CONTROLS.update(DEFAULT_CONTROLS) + SELECT_CONTROLS.update(SELECT_DOMAIN) + + embeds = [] + for guild in user_guilds: + embed = discord.Embed() + embed.title = "Where do you want to confess?" + embed.description = guild.name + embeds.append(embed) + + await menu(ctx, pages=embeds, controls=SELECT_CONTROLS, message=None, page=0, timeout=20) + + async def selected_guild(self, ctx, user_guilds, confession, page): + + confession_guild = user_guilds[page] + await self.send_confession(ctx, confession_guild, confession) + + async def send_confession(self, ctx, confession_guild: discord.Guild, confession: str): + + rooms = await self.config.guild(confession_guild).confession_rooms() + + for channel in confession_guild.text_channels: + if rooms == channel.id: + confession_room = channel + + if not confession_room: + return await ctx.author.send("The confession room does not appear to exist.") + + try: + embed = discord.Embed(title="I have forgiven another sin", colour=ctx.author.colour) + embed.set_footer(text="You can always confess to me.") + embed.add_field(name="Confession", value=confession) + + await ctx.bot.send_filtered(destination=confession_room, embed=embed) + except discord.errors.Forbidden: + return await ctx.author.send("I don't have permission to send messages to this room or something went wrong.") + + + await ctx.author.send("Your confession has been sent, you are forgiven now.") diff --git a/confession/info.json b/confession/info.json new file mode 100644 index 0000000..730c044 --- /dev/null +++ b/confession/info.json @@ -0,0 +1,9 @@ +{ + "author" : ["Brandons209", "Jinatku"], + "bot_version": [3,0,0], + "install_msg" : "Let your users confess their terrible terrible crimes in secrecy!", + "short" : "Confess secretly.", + "description" : "Confess in a confession room to repent your crimes.", + "tags" : ["confession", "crime", "secret"], + "hidden" : false +} diff --git a/nitroemoji/nitroemoji.py b/nitroemoji/nitroemoji.py index 5e1eca6..8c6e97a 100644 --- a/nitroemoji/nitroemoji.py +++ b/nitroemoji/nitroemoji.py @@ -81,7 +81,6 @@ class NitroEmoji(commands.Cog): embed.set_author(name=str(member), url=emoji.url) embed.set_thumbnail(url=emoji.url) - embed.set_author(name=str(member)) if reason: embed.add_field(name="Reason", value=reason)