public ModuleResponse GetSyns(ModuleRequest request)
 {
     try
     {
         var q = request.EncodeData["sync"].ToString();
         if (!string.IsNullOrEmpty(q))
         {
             var source = new WebSynonymsSource();
             var syncs = source.GetSynonyms(q);
             if (!syncs.Any())
             {
                 return new ModuleResponse(request, "Синонимы к слову '" + q + "' не найдены");
             }
             var builder = new StringBuilder();
             builder.Append("Синонимы к слову '" + q + "'. Всего: " + syncs.Count() + Environment.NewLine);
             foreach (var sync in syncs)
             {
                 builder.Append(sync + Environment.NewLine);
             }
             return new ModuleResponse(request, builder.ToString());
         }
         else
         {
             return new ModuleResponse(request, "Не могу вывести синонимы - отсутствует исходное слово");
         }
     }
     catch (Exception e)
     {
         return new ModuleResponse(request, "Ошибка: " + e.Message);
     }
 }
        public override FunctionExecuteResult Execute(FunctionExecuteArgs args)
        {

            var res = new List<string>();
            if (args.Args[0].StartsWith("@"))
            {
                var source = new WebSynonymsSource();
                Console.WriteLine("Соединяюсь с интернетом, на выполнение запроса уйдет немного больше времени...");
                var ss = source.GetSynonyms(args.Args[0].Substring(1));
                res.AddRange(ss);
                res.Add(args.Args[0].Substring(1));
            }
            else
            {
                res = new List<string>(args.Args);
            }

            var result = new List<string>();

            foreach (var arg in res)
            {
                try
                {
                    for (var i = 0; i < arg.Length; i++)
                    {
                        if (i == arg.Length - 1 && char.ToLower(args.Input[i]) == char.ToLower(arg[i]))
                        {
                            if (args.Attributes.ContainsKey("id"))
                            {
                                args.Provider.ComponentsData.Add(args.Attributes["id"], arg);
                            }
                            result.Add(arg);
                        }
                        if (char.ToLower(args.Input[i]) != char.ToLower(arg[i]))
                            break;
                    }
                }
                catch 
                {
                }
            }

            if (result.Count == 0)
            {
                return new FunctionExecuteResult(false, 0);
            }

            if (result.Count == 1)
            {
                return new FunctionExecuteResult(true, result.First().Length);
            }

            result.Sort((s1, s2) =>
                        {
                            if (s1.Length > s2.Length)
                                return 1;
                            if (s1.Length == s2.Length)
                                return 0;
                            return -1;
                        });

            return new FunctionExecuteResult(true, result.Last().Length);
        }