このコードを使用して、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; }
セッターがありません。
また、コマンドの登録を解除して再登録しようとしましたが、明らかにプレフィックスとは何の関係もありません。