discord.py混合命令是如何工作的?



我的bot的discord.py代码有问题。它不会在Discord的聊天框中显示为斜杠命令。我想用discord.py 1.7.3重写我已经运行了好几个月的bot,所以我想引入斜杠命令。现在我有一个问题,我的代码斜杠命令不显示,但他们使用前缀(!),有人能帮我吗?

Sideinfos:Discord.py = 2.1.0服务器= Linuxcd - server ID: 1000794475683123362它不是齿轮!

import sys
import discord
from discord import app_commands
from discord.ext import commands, tasks
import os
import json
from discord.ext.commands import Bot
import random
from random import randint
import datetime
import traceback
import urllib.request, json
import urllib
from dotenv import load_dotenv
from discord.ext.commands import clean_content
from discord.ext.commands.cooldowns import BucketType
from dislash import InteractionClient, SelectMenu, SelectOption
from PIL import Image,ImageFont,ImageDraw
from easy_pil import Editor, load_image_async, Font

bot = commands.Bot(command_prefix=["!","?",","],intents=discord.Intents.all())
botcolor = 0xffffff
@bot.hybrid_command(name='test',description='TEST')
@app_commands.guilds(discord.Object(1000794475683123362))
async def test(ctx):
await ctx.send("Test!")

bot.run(MyToken)

我上网查了一下,但没有找到任何有用的好答案。

斜杠命令必须注册到Discord。这是通过一个叫做syncing的过程完成的。通过调用tree.sync(),您可以将您的更改推送到Discord,让他们知道您的命令。如果你从不同步,Discord不知道你有斜杠命令。

这同样适用于普通的斜杠命令,这不仅仅适用于混合命令。

重要提示: doNOTauto-sync(自动同步on_readysetup_hook)。网上很多人都这么做,这是一个非常糟糕的主意。您应该只在更改/删除命令时进行同步,而不是每次bot启动时都进行同步。

这个API调用的速率限制是非常低和不可原谅的,所以如果你在on_ready中这样做(每次你的bot启动-这可能经常是在开发中),那么你会得到速率限制。

同步应该在专属消息命令中完成,所以只有你能给它打电话。如果其他人可以访问这个命令,他们可以限制你的速率,这样你就永远不能再同步了。

同步就像在消息命令中调用await bot.tree.sync()一样简单。如果你想同步到一个公会而不是全局,你可以传递一个ID作为参数。

如果你想知道:消息命令不需要同步的原因是因为它们实际上并不存在。不和谐不知道也不关心他们。当触发on_message事件时,这些将在bot本身中解析。斜杠命令被集成到Discord UI中,所以如果不把它推到某个地方,这是不可能完成的。