所以我尝试了各种在python环境中使用斜杠命令的方法。即使是混合命令,其中前缀版本可以工作,但斜杠命令甚至不会出现。我的所有范围都正确,公会 ID 正确(为了更快同步,但我也尝试过全局),权限都很好,所有意图都很好等等。我已经三遍检查过这些东西。在我当前的设置中,我从 main.py 启动机器人,然后加载 cogs。
这是我的main.py:
import discord
from discord import app_commands
from discord.ext import commands, tasks
import datetime
import os
bot = commands.Bot(
command_prefix=",",
intents=discord.Intents.all(),
status=discord.Status.dnd,
activity=discord.Activity(
type=discord.ActivityType.watching, name="Ursf"
),
)
bot.remove_command("help")
@bot.event
async def on_ready():
try:
await bot.tree.sync()
guild = discord.Object(id={guild_id_here})
await bot.tree.sync(guild=guild)
print(f"Slash commands synced to guild: {guild.id}")
except Exception as e:
print(f"Failed to sync commands: {e}")
print("\n\n bot is ready!")
for fn in os.listdir("./cogs"):
if fn.endswith(".py"):
try:
await bot.load_extension(f"cogs.{fn[:-3]}")
print(f"\n loaded extensions: {fn}")
except Exception as e:
print(f" failed to load extension(s) {fn}: {e}")
bot.run("{token}")
当我运行这个程序时,我得到的打印结果显示所有内容都已同步并且齿轮已加载等等。这是我正在尝试加载的齿轮代码:
class SipBot(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.hybrid_command(name="hello", description="Says hello")
async def newhello(self, ctx):
await ctx.send("Hello from both prefix and slash")
async def setup(bot):
await bot.add_cog(SipBot(bot))
在我目前的阶段,我正在测试混合装饰器,但我知道还有更多。是的,我已经测试了其中的很多。我可以成功执行“,hello”命令,并且工作正常,但在我的任何尝试中都找不到“/hello”斜杠命令。我什至踢了机器人并重新添加了它。
为了获得更多信息,我使用的是 VS2022 和 python 版本 3.11。 Discord.py 版本是 2.4.0,我没有安装 Discord 包(以防冲突)。
有什么建议吗?我尝试创建的命令有多个参数,因此我需要直观地显示参数(就像斜杠命令可以做到的那样),或者只是从所述斜杠命令启动模式。