SeaswimmerTheFsh
feb5dd0be8
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4s
103 lines
5 KiB
Python
103 lines
5 KiB
Python
from typing import Union
|
|
from redbot.core import commands, Config, app_commands
|
|
import discord
|
|
|
|
class Issues(commands.Cog):
|
|
"""This cog allows you to create Gitea issues through a Discord modal.
|
|
Developed by SeaswimmerTheFsh."""
|
|
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
self.config = Config.get_conf(self, identifier=4285273314713, force_registration=True)
|
|
self.config.register_global(
|
|
channel = None,
|
|
gitea_url = None
|
|
)
|
|
|
|
@app_commands.command()
|
|
async def issuestest(self, interaction: discord.Interaction):
|
|
passed_info = interaction
|
|
await interaction.response.send_message(content="Hello world!", view=self.IssueButtons(passed_info), ephemeral=True)
|
|
|
|
async def send_to_target(self, target: Union[discord.Member, discord.TextChannel], interaction: discord.Interaction, message: str, secondary_message: str = None):
|
|
if isinstance(target, discord.Member):
|
|
target_type = "member"
|
|
elif isinstance(target, discord.TextChannel):
|
|
target_type = "textchannel"
|
|
try:
|
|
await target.send(message)
|
|
if secondary_message is not None:
|
|
await target.send(secondary_message)
|
|
await interaction.response.send_message(content=f"Message sent to {target.mention}!\nMessage contents:\n```{message}```\n```{secondary_message}```", ephemeral=True)
|
|
else:
|
|
await interaction.response.send_message(content=f"Message sent to {target.mention}!\nMessage contents:\n```{message}```", ephemeral=True)
|
|
except (discord.HTTPException, discord.Forbidden) as error:
|
|
if target_type == "member":
|
|
await interaction.response.send_message(content="That user has their direct messages closed!", ephemeral=True)
|
|
elif target_type == "textchannel":
|
|
await interaction.response.send_message(content="I cannot access that channel!", ephemeral=True)
|
|
|
|
class IssueButtons(discord.ui.View):
|
|
def __init__(self, passed_info):
|
|
super().__init__()
|
|
self.passed_info: discord.Interaction = passed_info
|
|
|
|
@discord.ui.button(label="Bot Bug", style=discord.ButtonStyle.danger, row=0)
|
|
async def issue_button_bot_bug(self, interaction: discord.Interaction, button: discord.ui.Button):
|
|
await interaction.response.send_modal(Issues.BotBugModal())
|
|
|
|
@discord.ui.button(label="Cog Bug", style=discord.ButtonStyle.danger, row=1)
|
|
async def issue_button_cog_bug(self, interaction: discord.Interaction, button: discord.ui.Button):
|
|
await interaction.response.send_modal(Issues.BotBugModal())
|
|
|
|
@discord.ui.button(label="Bot Suggestion", style=discord.ButtonStyle.blurple, row=0)
|
|
async def issue_button_bot_suggestion(self, interaction: discord.Interaction, button: discord.ui.Button):
|
|
await interaction.response.send_modal(Issues.BotBugModal())
|
|
|
|
@discord.ui.button(label="Cog Suggestion", style=discord.ButtonStyle.blurple, row=1)
|
|
async def issue_button_cog_suggestion(self, interaction: discord.Interaction, button: discord.ui.Button):
|
|
await interaction.response.send_modal(Issues.BotBugModal())
|
|
|
|
class BotBugModal(discord.ui.Modal, title="Creating issue..."):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
bug_description = discord.ui.TextInput(
|
|
label="Describe the bug",
|
|
placeholder="A clear and concise description of what the bug is.",
|
|
style=discord.TextStyle.paragraph,
|
|
max_length=2048
|
|
)
|
|
reproduction_steps = discord.ui.TextInput(
|
|
label="To Reproduce",
|
|
placeholder="What caused the bug?",
|
|
style=discord.TextStyle.paragraph,
|
|
required=True,
|
|
max_length=2048
|
|
)
|
|
expected_behavior = discord.ui.TextInput(
|
|
label="Expected Behavior",
|
|
placeholder="A clear and concise description of what you expected to happen.",
|
|
style=discord.TextStyle.paragraph,
|
|
required=True,
|
|
max_length=2048
|
|
)
|
|
additional_context = discord.ui.TextInput(
|
|
label="Additional Context",
|
|
placeholder="Add any other context about the problem here.",
|
|
style=discord.TextStyle.paragraph,
|
|
required=False,
|
|
max_length=2048
|
|
)
|
|
screenshots = discord.ui.TextInput(
|
|
label="Screenshots",
|
|
placeholder="Add screenshots to help explain your problem. Seperate each screenshot with a newline.",
|
|
style=discord.TextStyle.paragraph,
|
|
required=False,
|
|
max_length=2048
|
|
)
|
|
|
|
async def on_submit(self, interaction: discord.Interaction):
|
|
embed = discord.Embed(title="Issue Request", color=await Issues.bot.get_embed_color(None))
|
|
fields = [self.bug_description, self.reproduction_steps, self.expected_behavior, self.additional_context, self.screenshots]
|
|
await Issues.send_to_target(self, self.target, interaction, self.message, self.secondary_message)
|