Files
baythn_bot/CommitsActionView.py
2025-12-19 20:40:02 +01:00

58 lines
2.2 KiB
Python

from typing import Dict, List
import discord
from discord.ui import View, Button
from FileBrowserSelect import FileBrowserSelect
class CommitActionsView(View):
"""Action buttons for a specific commit"""
def __init__(self, commit: Dict, files: List[Dict], timeout: int = 60):
super().__init__(timeout=timeout)
self.commit = commit
self.files = files
self.commit_sha = commit['sha']
self.commit_short = commit['sha'][:7]
# Link button that opens the commit in Gitea
link_button = Button(
label="🔗 Open in Gitea",
style=discord.ButtonStyle.link,
url=commit['html_url'],
emoji="🔗"
)
self.add_item(link_button)
# Add a file browser select if files exist
if files:
self.add_item(FileBrowserSelect(files, self.commit_sha))
@discord.ui.button(label="📊 View Diff", style=discord.ButtonStyle.primary)
async def view_diff(self, interaction: discord.Interaction, button: Button):
# Import here to avoid circular import with main.py
from main import show_commit_diff_interactive
await show_commit_diff_interactive(interaction, self.commit_sha)
@discord.ui.button(label="📁 Browse Files", style=discord.ButtonStyle.secondary)
async def browse_files(self, interaction: discord.Interaction, button: Button):
if not self.files:
await interaction.response.send_message("No files changed in this commit.", ephemeral=True)
return
embed = discord.Embed(
title=f"📁 Files in commit `{self.commit_short}`",
description="Select a file to view its diff:",
color=discord.Color.blue()
)
file_list = "\n".join([
f"• `{f['filename']}` (+{f.get('additions', 0)}/-{f.get('deletions', 0)})"
for f in self.files[:10]
])
if len(self.files) > 10:
file_list += f"\n... and {len(self.files) - 10} more"
embed.add_field(name="Changed Files", value=file_list, inline=False)
view = FileBrowserSelect(self.files, self.commit_sha)
await interaction.response.send_message(embed=embed, view=view, ephemeral=True)