斜杠命令未同步到我的调试服务器discord.py

问题描述 投票:0回答:1

刚刚开始学习如何使用在线视频制作不和谐机器人。目前,当我尝试将斜杠命令同步到调试服务器时,斜杠命令不会显示。

import settings
import discord
import sqlite3
from discord.ext import commands
from discord import app_commands

logger = settings.logging.getLogger("bot")

def is_owner(interaction: discord.Interaction):
    return str(interaction.user.id) == settings.OWNER_ID

def TableExists(dbcon, table_name):
    dbcur = dbcon.cursor()
    dbcur.execute(f"SELECT name FROM sqlite_master WHERE type = 'table' AND name = '{table_name}'")
    if len(dbcur.fetchall()) >= 1:
        dbcur.close()
        return True
    dbcur.close()
    return False

def run():
    intents = discord.Intents.all()

    bot = commands.Bot(command_prefix="/", intents=intents)

    @bot.hybrid_command()
    async def sync(ctx):
        logger.info("Syncing slash commands...")
        bot.tree.copy_global_to(guild=ctx.guild)
        commands = await bot.tree.sync(guild=settings.GUILDS_ID)
        logger.info(f"Registered commands: {commands}")
    
    @bot.tree.command(description = "Reload Bot Extensions (Owner only)",)
    @app_commands.check(is_owner)
    async def reload(interaction: discord.Interaction, cog: str = None):
        reloaded = True
        if cog is None:
            logger.info("Attempting to reload extensions...")
            for cog_file in settings.COGS_DIR.glob("*.py"):
                if cog_file != "__init__.py":
                    extension_name = cog_file.name[:-3]
                    try:
                        await bot.reload_extension(f"cogs.{extension_name}")
                    except Exception as e:
                        logger.error(f"Failed to reload extension: {e}")
                        reloaded = False
        else:
            try:
                logger.info("Attempting to reload extensions...")
                await bot.reload_extension(f"cogs.{cog.lower()}")
            except Exception as e:
                logger.error(f"Failed to reload extension: {e}")
                reloaded = False
        if reloaded:
            logger.info("Extensions reloaded successfully!")
            await interaction.response.send_message("Extensions reloaded", ephemeral=True)
        else:
            logger.info("Extensions failed to reload...")
            await interaction.response.send_message("Extensions failed to reload", ephemeral=True)
        
        bot.tree.copy_global_to(guild = settings.GUILDS_ID)
        bot.tree.clear_commands(guild = settings.GUILDS_ID)
        await bot.tree.sync(guild = settings.GUILDS_ID)
        bot.tree.clear_commands(guild = None)
        await bot.tree.sync()

    @reload.error
    async def say_error(interaction: discord.Integration, error):
        await interaction.response.send_message("You do not have permission to use this command", ephemeral=True)
    
    @bot.event
    async def on_ready():
        logger.info(f"User: {bot.user} (ID: {bot.user.id})")

        logger.info("Initialising database...")
        conn = sqlite3.connect(f"{settings.DBS_DIR}\\boxbot.db")
        cursor = conn.cursor()
        
        cursor.execute("DROP TABLE Rps")
        cursor.execute("DROP TABLE Slap")
        cursor.execute("DROP TABLE Ping")
        cursor.execute("DROP TABLE Member")
        cursor.execute("DROP TABLE Guild")
        if not(TableExists(conn, "Guild")):
            cursor.execute("""CREATE TABLE Guild (
                           guildID INT,
                           guildname VARCHAR(255),
                           sfw INT,
                           PRIMARY KEY (guildID)
                           )""")

        if not(TableExists(conn, "Member")):
            cursor.execute("""CREATE TABLE Member (
                           memberID INT,
                           guildID INT,
                           membername VARCHAR(255),
                           PRIMARY KEY (memberID, guildID),
                           FOREIGN KEY(guildID) REFERENCES Guild(guildID)
                           )""")
            
        if not(TableExists(conn, "Ping")):
            cursor.execute("""CREATE TABLE Ping (
                           pingerID INT,
                           pingerGID INT,
                           count INT,
                           PRIMARY KEY (pingerID),
                           FOREIGN KEY(pingerID) REFERENCES Member(memberID)
                           )""")
            
        if not(TableExists(conn, "Slap")):
            cursor.execute("""CREATE TABLE Slap (
                           slapperID INT,
                           slapperGID INT,
                           slappedID INT,
                           count INT,
                           PRIMARY KEY (slapperID, slapperGID),
                           FOREIGN KEY(slapperID, slapperGID, slappedID) REFERENCES Member(memberID, guildID, memberID)
                           )""")
            
        if not(TableExists(conn, "Rps")):
            cursor.execute("""CREATE TABLE Rps (
                           playerID INT,
                           playerGID INT,
                           won INT,
                           loss INT,
                           draw INT,
                           PRIMARY KEY (playerID, playerGID),
                           FOREIGN KEY(playerID, playerGID) REFERENCES Member(memberID, guildID)
                           )""")
        
        cursor.execute("SELECT guildID FROM Guild")
        guilds = [guildID[0] for guildID in cursor.fetchall()]
        for guild in bot.guilds:
            if guild.id not in guilds:
                cursor.execute("INSERT INTO Guild (guildID, guildname, sfw) VALUES (?, ?, ?)", (guild.id, guild.name, 0))
            for member in guild.members:
                cursor.execute("SELECT memberID FROM Member")
                members = [memberID[0] for memberID in cursor.fetchall()]
                if member.id != bot.user.id and member.id not in members:
                    cursor.execute("INSERT INTO Member (memberID, guildID, membername) VALUES (?, ?, ?)", (member.id, guild.id, member.name))
            conn.commit()
        logger.info("Initialised database!")

        for cog_file in settings.COGS_DIR.glob("*.py"):
            if cog_file != "__init__.py":
                extension_name = cog_file.name[:-3]
                try:
                    logger.info(f"Attempting to load extension: {extension_name}...")
                    await bot.load_extension(f"cogs.{extension_name}")
                    logger.info(f"Extension {extension_name} loaded successfully!")
                except Exception as e:
                    logger.error(f"Failed to load extension, {extension_name}: {e}")
        
        bot.tree.copy_global_to(guild = settings.GUILDS_ID)
        bot.tree.clear_commands(guild = settings.GUILDS_ID)
        await bot.tree.sync(guild = settings.GUILDS_ID)
        bot.tree.clear_commands(guild = None)
        await bot.tree.sync()

        conn.close()
        logger.info(f"{bot.user} has booted!")

    bot.run(settings.DISCORD_TOKEN, root_logger = True)  

if __name__ == "__main__":
    run()

我尝试使用混合命令同步它们,甚至将其放入

on_ready
本身,但它似乎不起作用......

我的 /sync 命令的输出返回以下内容:

Registered commands: []

附注斜线命令之前确实有效,但是,这个问题只是在我开始向我的 Cogs 添加更多命令后才出现。

discord discord.py
1个回答
0
投票
 @bot.command()
async def clearcache(ctx):
    bot.command_prefix = "!"  # Change this to your actual command prefix
    await bot.http.clear_application_commands(bot.user.id, bot.token)
    await ctx.send("Command cache cleared.")

运行此命令,然后再次尝试同步。如果您仍然遇到问题,请分享更多详细信息或代码,以便我们更好地提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.