Finish pobierz command
This commit is contained in:
parent
87a8aa5d96
commit
6f956629fa
6 changed files with 67 additions and 37 deletions
|
@ -48,7 +48,3 @@ class Wulkabot(commands.Bot):
|
||||||
async def load_extensions(self, package: types.ModuleType) -> None:
|
async def load_extensions(self, package: types.ModuleType) -> None:
|
||||||
for extension in self.find_extensions(package):
|
for extension in self.find_extensions(package):
|
||||||
await self.load_extension(extension)
|
await self.load_extension(extension)
|
||||||
|
|
||||||
async def reload_extensions(self) -> None:
|
|
||||||
for extension in set(self.extensions):
|
|
||||||
await self.reload_extension(extension)
|
|
||||||
|
|
|
@ -30,17 +30,6 @@ class Development(commands.Cog):
|
||||||
f"Synced **{len(commands)} {destination}** commands\n{commands_str}"
|
f"Synced **{len(commands)} {destination}** commands\n{commands_str}"
|
||||||
)
|
)
|
||||||
|
|
||||||
@app_commands.command()
|
|
||||||
async def reload(self, interaction: discord.Interaction):
|
|
||||||
"""Przeładowuje komendy bota"""
|
|
||||||
# temporary check, needs refactoring
|
|
||||||
if not await self.bot.is_owner(interaction.user):
|
|
||||||
await interaction.response.send_message("nie", ephemeral=True)
|
|
||||||
return
|
|
||||||
|
|
||||||
await self.bot.reload_extensions()
|
|
||||||
await interaction.response.send_message("Reloaded successfuly")
|
|
||||||
|
|
||||||
|
|
||||||
async def setup(bot: bot.Wulkabot):
|
async def setup(bot: bot.Wulkabot):
|
||||||
await bot.add_cog(Development(bot))
|
await bot.add_cog(Development(bot))
|
||||||
|
|
|
@ -7,12 +7,11 @@ from discord.ext import commands
|
||||||
|
|
||||||
from .. import bot
|
from .. import bot
|
||||||
from ..utils import github
|
from ..utils import github
|
||||||
|
from ..utils.constants import REPO
|
||||||
from ..utils.views import DeleteButton
|
from ..utils.views import DeleteButton
|
||||||
|
|
||||||
Repo = tuple[str, str]
|
Repo = tuple[str, str]
|
||||||
|
|
||||||
DEFAULT_REPO: Repo = ("wulkanowy", "wulkanowy")
|
|
||||||
|
|
||||||
|
|
||||||
def parse_repo(text: str, *, default_owner: str | None = None) -> Repo | None:
|
def parse_repo(text: str, *, default_owner: str | None = None) -> Repo | None:
|
||||||
"""
|
"""
|
||||||
|
@ -157,20 +156,20 @@ class GitHub(commands.Cog):
|
||||||
try:
|
try:
|
||||||
topic = message.channel.topic # type: ignore
|
topic = message.channel.topic # type: ignore
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
channel_repo = DEFAULT_REPO
|
channel_repo = REPO
|
||||||
else:
|
else:
|
||||||
if topic is not None:
|
if topic is not None:
|
||||||
channel_repo = find_repo_in_channel_topic(topic)
|
channel_repo = find_repo_in_channel_topic(topic)
|
||||||
if channel_repo is None:
|
if channel_repo is None:
|
||||||
channel_repo = DEFAULT_REPO
|
channel_repo = REPO
|
||||||
else:
|
else:
|
||||||
channel_repo = DEFAULT_REPO
|
channel_repo = REPO
|
||||||
|
|
||||||
for word in words:
|
for word in words:
|
||||||
match = parse_issue(word, default_owner=channel_repo[0], default_repo=channel_repo[1])
|
match = parse_issue(word, default_owner=channel_repo[0], default_repo=channel_repo[1])
|
||||||
if match is not None:
|
if match is not None:
|
||||||
repo, issue_number = match
|
repo, issue_number = match
|
||||||
repo = repo or DEFAULT_REPO
|
repo = repo or REPO
|
||||||
try:
|
try:
|
||||||
issue = await self.github.fetch_issue(*repo, issue_number)
|
issue = await self.github.fetch_issue(*repo, issue_number)
|
||||||
except aiohttp.ClientResponseError:
|
except aiohttp.ClientResponseError:
|
||||||
|
|
|
@ -6,8 +6,19 @@ from discord.ext import commands
|
||||||
|
|
||||||
from .. import bot
|
from .. import bot
|
||||||
from ..utils import github, wulkanowy_manager
|
from ..utils import github, wulkanowy_manager
|
||||||
|
from ..utils.constants import ACCENT_COLOR, BUILDS_CHANNEL_ID, REPO
|
||||||
from ..utils.wulkanowy_manager import WulkanowyBuild, WulkanowyManagerException
|
from ..utils.wulkanowy_manager import WulkanowyBuild, WulkanowyManagerException
|
||||||
|
|
||||||
|
OTHER_DOWNLOADS = " | ".join(
|
||||||
|
(
|
||||||
|
"[Google Play](https://play.google.com/store/apps/details?id=io.github.wulkanowy)",
|
||||||
|
"[GitHub](https://github.com/wulkanowy/wulkanowy/releases)",
|
||||||
|
"[F-Droid](https://f-droid.org/en/packages/io.github.wulkanowy)",
|
||||||
|
"[AppGallery](https://appgallery.huawei.com/app/C101440411)",
|
||||||
|
f"<#{BUILDS_CHANNEL_ID}>",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Wulkanowy(commands.Cog):
|
class Wulkanowy(commands.Cog):
|
||||||
def __init__(self, bot: bot.Wulkabot) -> None:
|
def __init__(self, bot: bot.Wulkabot) -> None:
|
||||||
|
@ -22,20 +33,44 @@ class Wulkanowy(commands.Cog):
|
||||||
|
|
||||||
@app_commands.command()
|
@app_commands.command()
|
||||||
async def pobierz(self, interaction: discord.Interaction):
|
async def pobierz(self, interaction: discord.Interaction):
|
||||||
branches = await self.github.fetch_branches("wulkanowy", "wulkanowy")
|
await interaction.response.defer(thinking=True)
|
||||||
|
|
||||||
|
release = await self.github.fetch_latest_release(*REPO)
|
||||||
|
download_urls = []
|
||||||
|
for asset in release["assets"]:
|
||||||
|
name = asset["name"]
|
||||||
|
url = asset["browser_download_url"]
|
||||||
|
download_urls.append(f"[{name}]({url})")
|
||||||
|
download_urls = "\n".join(download_urls)
|
||||||
|
|
||||||
|
pulls = await self.github.fetch_open_pulls(*REPO)
|
||||||
|
branches = ["develop"]
|
||||||
|
branches.extend((pull["head"]["ref"] for pull in pulls))
|
||||||
builds: list[WulkanowyBuild | WulkanowyManagerException] = await asyncio.gather(
|
builds: list[WulkanowyBuild | WulkanowyManagerException] = await asyncio.gather(
|
||||||
*(map(self.wulkanowy_manager.fetch_branch_build, branches)), return_exceptions=True
|
*map(self.wulkanowy_manager.fetch_branch_build, branches), return_exceptions=True
|
||||||
)
|
)
|
||||||
text = []
|
lines = "\n".join(
|
||||||
for branch, build in zip(branches, builds, strict=True):
|
(
|
||||||
if isinstance(build, WulkanowyBuild):
|
f"`{build.build_number}` – [{branch}]({build.download_url})"
|
||||||
text.append(f"{branch}: [pobierz]({build.download_url})")
|
for branch, build in zip(branches, builds, strict=True)
|
||||||
else:
|
if isinstance(build, WulkanowyBuild)
|
||||||
text.append(f"{branch}: brak")
|
)
|
||||||
embed = discord.Embed(
|
|
||||||
title="Pobierz najnowsze wersje testowe!", description="\n".join(text)
|
|
||||||
)
|
)
|
||||||
await interaction.response.send_message(embed=embed)
|
|
||||||
|
text = "\n".join(
|
||||||
|
(
|
||||||
|
f'**Najnowsza wersja {release["name"]}**',
|
||||||
|
download_urls,
|
||||||
|
"",
|
||||||
|
"**Wersje testowe**",
|
||||||
|
lines,
|
||||||
|
"",
|
||||||
|
"**Inne źródła**",
|
||||||
|
OTHER_DOWNLOADS,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
embed = discord.Embed(title="Pobierz Wulkanowego!", description=text, color=ACCENT_COLOR)
|
||||||
|
await interaction.followup.send(embed=embed)
|
||||||
|
|
||||||
|
|
||||||
async def setup(bot: bot.Wulkabot):
|
async def setup(bot: bot.Wulkabot):
|
||||||
|
|
4
wulkabot/utils/constants.py
Normal file
4
wulkabot/utils/constants.py
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
REPO = ("wulkanowy", "wulkanowy")
|
||||||
|
ACCENT_COLOR = 0xD32F2F
|
||||||
|
DEFAULT_BRANCH = "develop"
|
||||||
|
BUILDS_CHANNEL_ID = 983106478426693653
|
|
@ -1,4 +1,4 @@
|
||||||
from typing import Any
|
from typing import Any, Literal
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
|
|
||||||
|
@ -14,16 +14,23 @@ class GitHub:
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
return await response.json()
|
return await response.json()
|
||||||
|
|
||||||
async def fetch_branches(self, owner: str, repo: str) -> list[str]:
|
async def fetch_open_pulls(self, owner: str, repo: str):
|
||||||
response = await self._http.get(f"/repos/{owner}/{repo}/branches")
|
response = await self._http.get(
|
||||||
|
f"/repos/{owner}/{repo}/pulls",
|
||||||
|
params={"state": "open", "sort": "updated", "direction": "desc", "per_page": 25},
|
||||||
|
)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
branches = await response.json()
|
return await response.json()
|
||||||
return [branch["name"] for branch in branches]
|
|
||||||
|
|
||||||
async def fetch_issue(self, owner: str, repo: str, issue_number: int) -> dict[str, Any]:
|
async def fetch_issue(self, owner: str, repo: str, issue_number: int) -> dict[str, Any]:
|
||||||
response = await self._http.get(f"/repos/{owner}/{repo}/issues/{issue_number}")
|
response = await self._http.get(f"/repos/{owner}/{repo}/issues/{issue_number}")
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
return await response.json()
|
return await response.json()
|
||||||
|
|
||||||
|
async def fetch_latest_release(self, owner: str, repo: str):
|
||||||
|
response = await self._http.get(f"/repos/{owner}/{repo}/releases/latest")
|
||||||
|
response.raise_for_status()
|
||||||
|
return await response.json()
|
||||||
|
|
||||||
async def close(self):
|
async def close(self):
|
||||||
await self._http.close()
|
await self._http.close()
|
||||||
|
|
Loading…
Reference in a new issue