diff --git a/chiya/cogs/apps/move_question.py b/chiya/cogs/apps/move_question.py new file mode 100644 index 00000000..f19d4474 --- /dev/null +++ b/chiya/cogs/apps/move_question.py @@ -0,0 +1,86 @@ +from subprocess import call + +import aiohttp +import discord +from discord import app_commands, Webhook +from discord.ext import commands +from loguru import logger as log + +from chiya.config import config +from chiya.utils import embeds + + + +class MoveQuestionApp(commands.Cog): + def __init__(self, bot) -> None: + self.bot = bot + self.move_question_command = app_commands.ContextMenu(name="Move Question", callback=self.move_question) + self.bot.tree.add_command(self.move_question_command) + + @app_commands.guilds(config["guild_id"]) + @app_commands.guild_only() + async def move_question(self, ctx: discord.Interaction, message: discord.Message) -> None: + """ + Staff only context menu command for moving questions to the appropriate channel. + """ + await ctx.response.defer(thinking=True, ephemeral=True) + + staff = [x for x in ctx.user.roles if x.id == config["roles"]["staff"] or x.id == config["roles"]["trial"]] + if not staff: + return await embeds.error_message(ctx=ctx, description="You do not have permissions to use this command.") + + if ctx.channel.category_id in [ + config["categories"]["moderation"], + config["categories"]["development"], + config["categories"]["logs"], + config["categories"]["tickets"], + ]: + return await embeds.error_message( + ctx=ctx, + description="You do not have permissions to use this command in this category.", + ) + + channel = discord.utils.get( + ctx.guild.text_channels, + id=config["channels"]["public"]["questions_and_help"], + ) + + async with aiohttp.ClientSession() as session: + webhook = Webhook.from_url( + url=config["bot"]["webhook_url"], + session=session, + ) + + content = f"{message.content}\n\n" + for attachment in message.attachments: + content += f"{attachment.url}\n" + + await webhook.send( + content=content, + username=message.author.name, + avatar_url=message.author.display_avatar.url, + ) + + success_embed = embeds.make_embed( + description=f"Successfully moved message to: {channel.mention}", + color=discord.Color.green(), + ) + await ctx.followup.send(embed=success_embed) + + await embeds.warning_message( + ctx=ctx, + title="Warning: Your question was moved", + description=( + f"{message.author.mention}, your message was moved to {channel.mention} " + "which is the more appropriate channel for help, questions, and support type " + "topics. Please continue your conversation in that channel." + ), + ) + ping = await channel.send(message.author.mention) + await ping.delete() + await message.delete() + + +async def setup(bot: commands.Bot) -> None: + await bot.add_cog(MoveQuestionApp(bot)) + log.info("App loaded: move_question")