C# 有没有办法在Discord.net中重载命令?

C# 有没有办法在Discord.net中重载命令?,c#,discord.net,C#,Discord.net,我的Discord Bot有两个模块:第一个是UserModule,其中每个命令都是用户可以执行的,第二个是AdminModule,服务器管理员可以在其中自定义和设置Bot。现在,我在UserModule中得到了命令Money,这使得bot告诉执行者他有多少钱。但对于管理员来说,还有另一个金钱命令: [Group("Money")] class Credits : ModuleBase { [Command("add")] public void

我的Discord Bot有两个模块:第一个是
UserModule
,其中每个命令都是用户可以执行的,第二个是
AdminModule
,服务器管理员可以在其中自定义和设置Bot。现在,我在UserModule中得到了命令
Money
,这使得bot告诉执行者他有多少钱。但对于管理员来说,还有另一个金钱命令:

[Group("Money")]
    class Credits : ModuleBase
    {
        [Command("add")]
        public void AddMoney(IGuildUser user, int amount)
        {
            int money = Convert.ToInt32(DBConnector.GetInstance().GetDBData
                ($"SELECT Money FROM Users WHERE UserID = {user.Id} AND ServerID = {Context.Guild.Id}")[0]);

            //This will be read from the database in the future
            bool capped = false;

            if (capped)
            {
                int maxAmount = Convert.ToInt32(DBConnector.GetInstance().GetDBData
                ($"SELECT Money FROM Users WHERE UserID = {user.Id} AND ServerID = {Context.Guild.Id}")[0]);

                if (money + amount > maxAmount)
                {
                    amount = maxAmount - money;
                }
            }

            DBConnector.GetInstance().ExecuteCommand($"UPDATE Users SET Money=Money+{amount} WHERE UserID = {user.Id} AND ServerID = {Context.Guild.Id}");
        }
//some more commands
...
这是AdminModule中的一个子模块,显然用于手动向用户添加或删除资金。但是当我想用
//money add@user 10
测试这个命令时,我得到了一个错误,“输入文本有太多的参数。” 这表明bot使用UserCommand而不是AdminCommand,因此我想知道如何使bot实现


“嘿,这个命令有一个usernote和一个整数。admin命令也是这样。让我执行这个命令”

如果我看这个问题,你有两个解决这个问题的方法

1.解决方案 我假设您的不同用户有不同的角色。因此,您的管理员获得了一个名为
服务器管理员
或类似角色。您可以创建一个自定义的
预条件属性
,有关示例,请参见。此属性可能会为提供的所有角色返回错误。通过这种方式,您可以“禁止”管理员使用
//money add
命令。然后是另一个,它只允许管理员执行它的管理员版本

2.解决方案 这个有点脏,不推荐。您只能按住一个
Add
命令,该命令将包含普通用户和管理员用户的逻辑。通过if语句,您可以检查他们的角色并决定下一步做什么


我确信第一个解决方案更适合您的需要。

但是如果每个模块中都有相同的命令,并且用户模块中的命令仅限于每个人,那么当管理员执行它时,我会收到一条成功消息和一条错误消息。我还想避免模块中的角色替换,这就是我使用这些模块的原因。用户模块适用于所有人,管理员模块适用于管理员。如果我在一个用户模块中放置了一个admin命令,并且有它的前提条件,那么如果我不遵守规则“对命令没有直接的角色限制”,那么整个模块设置是无用的。我明白你的问题了。你可以再试试。尝试手动添加模块,而不仅仅是整个组件。您可以通过更改添加模块的顺序来实现所需的功能。我不知道它是如何实施的。你还是应该试一试。如果这不起作用,你可能需要编写一个自定义CommandService或使用RoleReconditions。奇怪的是,我在UserModule中已经有了一个
/Money
命令。用户将自己的钱作为输出。对于管理员,我有相同的命令,但参数是IGuildUser。这就是你提到的任何人的钱。这也行。在它不起作用后,我将命令从
Group(“Money”)->Command(“add”)、Command(“delete”)、Command(“info”)
更改为3个单独的命令:Command(“Money add”)、Command(“Money remove”)、Command(“Money info”),只是好奇到底有什么区别,为什么你想在管理员和用户的钱数上显示不同的东西。