如何将参数传递到要在不和谐的bot中传递给bot.get_command()的命令中?

时间:2020-06-27 18:40:24

标签: python discord.py discord.py-rewrite

我正在为我的私有discord服务器创建discord机器人,但遇到了问题。

我有三个功能,loadunloadreload以嵌齿轮的形式扩展。 loadunload命令的创建完全可以,但是我在使用reload命令时遇到了麻烦。

为了不重复代码,我想在unload(extension)命令中调用load(extensionreload(extension),但是,我还无法弄清楚该怎么做。如此。

这是我的代码:

import discord
from discord.ext import commands
import os
from settings import BOT_TOKEN

client = commands.Bot(command_prefix=(".", "!", "?", "-"))

@client.event
async def on_ready():
    await client.change_presence(status=discord.Status.idle)
    print("Discord_Bot is ready")

@client.command()
async def load(ctx, extension):
    client.load_extension("cogs.{0}".format(extension))

@client.command()
async def unload(ctx, extension):
    client.unload_extension("cogs.{0}".format(extension))

@client.command()
async def reload(ctx, extension):
    await ctx.invoke(client.get_command("unload({0}".format(extension)))
    await ctx.invoke(client.get_command("load({0})".format(extension)))

# Load Cogs on Boot
for filename in os.listdir("./cogs"):
    if filename.endswith(".py"):
        client.load_extension("cogs.{0}".format(filename[:-3]))


client.run(BOT_TOKEN)

我还有一个example_cog.py,用于测试loadunloadreload命令的功能。此文件中没有命令,只是起齿轮作用所需的基本知识。

example_cog.py

import discord
from discord.ext import commands

class Example_Cog(commands.Cog):
    def __init__(self, client):
        self.client = client


def setup(client):
    client.add_cog(Example_Cog(client))

当我在私人不和谐服务器上使用漫游器并尝试重新加载时,它不起作用。我已经阅读了文档,但无法弄清楚如何将参数传递到bot.get_command()函数中。非常感谢您在此问题上的帮助。

我尝试了使用bot.get_command()函数的许多不同方式,但是它们都不起作用。这些包括:

await ctx.invoke(client.get_command("unload {0}".format(extension)))


await ctx.invoke(client.get_command("unload({0})".format(extension)))

谢谢,本

1 个答案:

答案 0 :(得分:1)

您需要以字符串类型传递命令名称。示例:

@bot.event
async def on_ready():
    # call command without args
    await bot.get_command('examplecommand').callback()
    # call command with args
    await bot.get_command('exampleArgsCommand').callback(ctx, message)

@bot.command()
async def examplecommand():
    pass

@bot.command()
async def exampleArgsCommand(ctx, message):
    pass