我正在使用此代码为 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 已为该客户端启用。'”
我认为没有办法直接更改配置,因为
命令NextConfiguration Config { get; }
没有二传手。
我也尝试过取消注册命令并将它们注册回来,但显然它与前缀没有任何关系。