Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }