3

このコードを使用して、CommandsNextExtension 変数の構成を設定し、コマンドを登録しています。

commandsConfig = new CommandsNextConfiguration
        {
            StringPrefixes = new string[] {prefix},
            EnableDms = false,
            EnableMentionPrefix = true
        };

        Commands = Client.UseCommandsNext(commandsConfig);
        Commands.RegisterCommands<CommandsList>();
        Commands.RegisterCommands<LavalinkCommands>();

次に、jsonファイルに新しいプレフィックスを書き込むためにこれを使用し、ボットを再起動した後、必要に応じてプレフィックスを変更します:

[Command("prefix")]
    [Description("Changes the prefix for commands.")]
    public async Task Prefix(CommandContext ctx, [RemainingText] string prefix)
    {
        gPrefix[0] = prefix;
        string jsonString = File.ReadAllText("config.json");
        JObject jObject = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString) as JObject;
        JToken jToken = jObject.SelectToken("prefix");
        jToken.Replace(prefix);
        string updatedJsonString = jObject.ToString();
        File.WriteAllText("config.json", updatedJsonString);
        Bot.prefix = prefix;
        await ctx.Channel.SendMessageAsync($"Prefix successfully changed to {prefix}");
    }

この時点で、新しい構成でメソッド UseCommandsNext を使用しようとしましたが、「System.InvalidOperationException: 'CommandsNext はそのクライアントに対して既に有効になっています。'」というエラーが表示されます。

構成を直接変更する方法はないと思います。

CommandsNextConfiguration 構成 { get; }

セッターがありません。

また、コマンドの登録を解除して再登録しようとしましたが、明らかにプレフィックスとは何の関係もありません。

4

1 に答える 1