Refactor ExtendedAudio cog to improve channel name management and status update handling. Implement functionality to store and reset original channel names, enhance status format configuration with additional variables, and introduce cleanup tasks on cog unload and voice state updates for a better user experience.
Some checks are pending
Run pre-commit / Run pre-commit (push) Waiting to run

This commit is contained in:
Valerie 2025-05-25 03:53:58 -04:00
parent bddbd49106
commit 09726661f3
3 changed files with 111 additions and 0 deletions

4
rubyapi/__init__.py Normal file
View file

@ -0,0 +1,4 @@
from .rubyapi import RubyAPI
async def setup(bot):
await bot.add_cog(RubyAPI(bot))

10
rubyapi/info.json Normal file
View file

@ -0,0 +1,10 @@
{
"name": "RubyAPI",
"author": ["Valerie"],
"description": "A cog to handle Discord interactions and linked roles verification through Ruby API endpoints.",
"short": "Ruby API integration for Discord interactions",
"tags": ["api", "interactions", "verification", "roles"],
"type": "COG",
"end_user_data_statement": "This cog stores guild configuration for API endpoints. No personal user data is stored.",
"min_bot_version": "3.5.0"
}

97
rubyapi/rubyapi.py Normal file
View file

@ -0,0 +1,97 @@
from typing import Optional
import discord
from redbot.core import commands, Config
from redbot.core.bot import Red
from redbot.core.utils.chat_formatting import box
class RubyAPI(commands.Cog):
"""Ruby API integration for interactions and linked roles verification."""
def __init__(self, bot: Red):
self.bot = bot
self.config = Config.get_conf(self, identifier=867530999, force_registration=True)
default_guild = {
"interaction_url": "https://ruby.valerie.lol/api/interactions",
"verify_url": "https://ruby.valerie.lol/verify-user",
"enabled": False
}
self.config.register_guild(**default_guild)
@commands.group(name="rubyapi")
@commands.admin_or_permissions(manage_guild=True)
async def rubyapi(self, ctx: commands.Context):
"""Ruby API configuration commands."""
pass
@rubyapi.command(name="enable")
async def enable_integration(self, ctx: commands.Context, toggle: bool):
"""Enable or disable Ruby API integration."""
await self.config.guild(ctx.guild).enabled.set(toggle)
status = "enabled" if toggle else "disabled"
await ctx.send(f"Ruby API integration has been {status}.")
@rubyapi.command(name="setinteraction")
async def set_interaction_url(self, ctx: commands.Context, url: str):
"""Set the interaction endpoint URL."""
if not url.startswith(("http://", "https://")):
return await ctx.send("Please provide a valid URL starting with http:// or https://")
await self.config.guild(ctx.guild).interaction_url.set(url)
await ctx.send("Interaction endpoint URL has been updated.")
@rubyapi.command(name="setverify")
async def set_verify_url(self, ctx: commands.Context, url: str):
"""Set the verification endpoint URL."""
if not url.startswith(("http://", "https://")):
return await ctx.send("Please provide a valid URL starting with http:// or https://")
await self.config.guild(ctx.guild).verify_url.set(url)
await ctx.send("Verification endpoint URL has been updated.")
@rubyapi.command(name="settings")
async def show_settings(self, ctx: commands.Context):
"""Show current Ruby API settings."""
guild_config = await self.config.guild(ctx.guild).all()
enabled = "Yes" if guild_config["enabled"] else "No"
interaction_url = guild_config["interaction_url"]
verify_url = guild_config["verify_url"]
message = (
"Ruby API Settings:\n"
f"Enabled: {enabled}\n"
f"Interaction URL: {interaction_url}\n"
f"Verify URL: {verify_url}"
)
await ctx.send(box(message))
@commands.command()
async def verifyuser(self, ctx: commands.Context, user: Optional[discord.Member] = None):
"""Verify a user's linked roles."""
if not await self.config.guild(ctx.guild).enabled():
return await ctx.send("Ruby API integration is not enabled in this server.")
user = user or ctx.author
verify_url = await self.config.guild(ctx.guild).verify_url()
# Here you would implement the actual API call to verify the user
# For demonstration, we'll just show a message
await ctx.send(f"Verification would be performed for {user.mention} using {verify_url}")
@commands.Cog.listener()
async def on_interaction(self, interaction: discord.Interaction):
"""Handle incoming Discord interactions."""
if not interaction.guild:
return
if not await self.config.guild(interaction.guild).enabled():
return
# Here you would implement the actual interaction handling
# For demonstration, we'll just log the interaction
interaction_url = await self.config.guild(interaction.guild).interaction_url()
# You would typically make an API request to the interaction_url here