public object HandleCommand(User user, BaseChat chat, string cmdline, Message messageData) { var split = Regex.Split(cmdline, "(?<=^[^\"]*(?:\"[^\"]*\"[^\"]*)*) (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"); string commandName = split[0].ToLower(); string[] arguments = split.Skip(1).ToArray(); Command command = null; command = GetCommand(commandName, chat.VkApi.GroupId); bool showErrorLine = Core.Configuration.GetValue("Config:Plugins:Commands:ShowErrorLine", true); if (command == null) { //Log.Warn($"Found no command {commandName}"); if (showErrorLine) { chat.SendMessageAsync($"[❗] Неизвестная команда \"/{commandName}\"! Полный список команд /help"); } return(null); } var overloads = PermittedOverloads(command.Overloads.Values.OrderByDescending(o => o.Method.GetParameters().Length), user, chat as Chat); foreach (var overload in overloads) { try { MethodInfo method = overload.Method; if (!IsAvailable(method, chat.VkApi.GroupId) || !CorrectlyUsage(method, chat)) { continue; } if (ExecuteCommand(method, user, chat, arguments, messageData, out object retVal)) { return(retVal); } } catch (Exception e) { Core.Log.Error(chat, e.ToString()); continue; } Core.Log.Debug("No result from execution"); } if (showErrorLine) { chat.SendMessageAsync("[❗] Неверный синтаксис команды! /help чтобы посмотреть полный список команд"); } return(null); }
private bool UseCommand(User user, string message, BaseChat chat, Message messageData) { var starts = CommandStarts.Select(s => Regex.Escape(s)).ToList(); foreach (var start in starts.ToArray()) { starts.Add($@"\[(public|club){VkApi.GroupId}\|[\S\s]{{1,}}](,|) {start}"); } string regStart = @"\A(" + string.Join('|', starts) + @")"; message = Regex.Match(message, regStart + @"[\S\s]{1,}", RegexOptions.IgnoreCase).Value; if (!string.IsNullOrEmpty(message)) { try { message = Regex.Replace(message.Replace("ё", "е"), regStart, "", RegexOptions.IgnoreCase); VkApi.Core.PluginManager.HandleCommand(user, chat, message, messageData); return(true); } catch (Exception e) { chat.SendMessageAsync("Команда задана неверно!"); VkApi.Core.Log.Error(e.ToString()); } } return(false); }