import os import discord from discord import app_commands import httpx from client import client, tree GUILD_ID = os.getenv("GUILD_ID") GITEA_API_KEY = os.getenv("GITEA_API_KEY") gitea_url = "https://git.epicsparrow.com/api/v1" GITEA_PROJECTS = {} auth_headers = {"Authorization": f"token {GITEA_API_KEY}"} def init_gitea_projects(): res = httpx.get(gitea_url + "/repos/search", headers=auth_headers) if res.status_code == 200: GITEA_PROJECTS.update( { str(project["id"]): { "name": project["name"], "owner": project["owner"]["login"], } for project in res.json()["data"] } ) return [(project["name"], project["id"]) for project in res.json()["data"]] else: return [] init_gitea_projects() @tree.command( name="gitea-issue", description="Create issues to gitea", ) @app_commands.describe( title="Issue title", project="The project where the issue is created" ) @app_commands.choices( project=[ app_commands.Choice(name=project["name"], value=id_) for id_, project in GITEA_PROJECTS.items() ] ) async def gitea(interaction: discord.Interaction, project: str, title: str): embed = discord.Embed(title="Gitea issue") embed.add_field(name="Project", value=GITEA_PROJECTS[project]["name"]) embed.add_field(name="Title", value=title) embed.add_field(name="Created by", value=interaction.user.mention) creation_url = f"{gitea_url}/repos/{GITEA_PROJECTS[project]['owner']}/{GITEA_PROJECTS[project]['name']}/issues" creation_data = { "title": title, "body": f"Created by {interaction.user.nick or interaction.user.name} from Discord.", } res = httpx.post(creation_url, headers=auth_headers, data=creation_data) if res.status_code == 201: embed.add_field(name="Issue created", value=res.json()["html_url"]) else: embed.add_field(name="Error", value=res.text) await interaction.response.send_message(embed=embed)