예제 #1
0
 public ActionResult Edit([Bind(Include = "SerialNo,IdNo,FullName,EnglishFullName,Email,Podobi,Salary,Category,Department,JoiningDate,AccountNo,MainSalaryGrade,IncrementNo,Sex,IsFreedomFighter,IsAddiitonalDuties,IsStudentAdviser,IsDean,IsChairman,IsProvost,IsProctor,IsAssistantProctor,HasOwnTransportationMethod,IsTeacher")] Employee employee)
 {
     if (ModelState.IsValid)
     {
         var grade = from a in db.Grades
                     where a.GradeRange.Equals(employee.MainSalaryGrade)
                     select a;
         Grade orDefault = grade.FirstOrDefault();
         if (orDefault != null)
         {
             int grad             = orDefault.GradeNo;
             int increment        = Int32.Parse(LanguageConverter.BanglaToEnglish(employee.IncrementNo));
             var mainsalaryString = from a in db.Taxes
                                    where a.Grade.Equals(grad) && a.Scale.Equals(increment)
                                    select a;
             var firstOrDefault = mainsalaryString.FirstOrDefault();
             if (firstOrDefault != null)
             {
                 employee.Salary = firstOrDefault.MainSalary;
             }
         }
         db.Entry(employee).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(employee));
 }
예제 #2
0
        internal static string GetAbout(Update update, string[] args)
        {
            var       language = GetLanguage(update.Message.From.Id);
            var       files    = Directory.GetFiles(Bot.LanguageDirectory);
            XDocument doc;
            var       file = files.First(x => Path.GetFileNameWithoutExtension(x) == language);
            {
                doc = LanguageConverter.Load(file);
            }
            var strings = doc.Descendants("string")
                          .FirstOrDefault(x => x.Attribute("key").Value.ToLower() == args[0].ToLower());

            if (strings == null)
            {
                var efile = LanguageConverter.Load(Path.Combine(Bot.LanguageDirectory, "English.yaml"));
                strings =
                    efile.Descendants("string")
                    .FirstOrDefault(x => x.Attribute("key").Value.ToLower() == args[0].ToLower());
            }

            if (strings == null)
            {
                return(null);
            }

            var values   = strings.Descendants("value");
            var choice   = Bot.R.Next(values.Count());
            var selected = values.ElementAt(choice);

            return(string.Format(selected.Value.FormatHTML(), args).Replace("\\n", Environment.NewLine));
        }
        public void ValidateCode(object sender, RoutedEventArgs e)
        {
            object context             = Utils.GetDataContext(sender);
            IEnumerable <XmlNode> data = Utils.GetXmlDataContext(context);

            if (null != data)
            {
                foreach (XmlNode node in data)
                {
                    XmlNode attr = node.SelectSingleNode("languageCode/@value");
                    if (null != attr)
                    {
                        string code = attr.Value;
                        if (2 == code.Length)
                        {
                            string threeLetter = LanguageConverter.GetThreeLetterCode(code);
                            if (null != threeLetter)
                            {
                                attr.Value = threeLetter;
                                MetadataEditorControl.UpdateDataContext(this as DependencyObject);
                            }
                        }
                    }
                    break; // just one
                }
            }
        }
예제 #4
0
파일: Program.cs 프로젝트: 421p/Werewolf
        private static void Main(string[] args)
        {
            //set up exception logging.  It appears nodes are crashing and I'm not getting any output
            AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
            {
                var ex = eventArgs.ExceptionObject as Exception;
                using (var sw = new StreamWriter(Path.Combine(RootDirectory, "../Logs/NodeFatalError.log"), true))
                {
                    sw.WriteLine($"{DateTime.Now} - {Version} - {ex.Message}");
                    sw.WriteLine(ex.StackTrace);
                    while (ex.InnerException != null)
                    {
                        ex = ex.InnerException;
                        sw.WriteLine($"{ex.Message}");
                        sw.WriteLine(ex.StackTrace);
                    }

                    sw.WriteLine("--------------------------------------------------------");
                }
            };
            English  = LanguageConverter.Load(Path.Combine(LanguageDirectory, "English.yaml"));
            APIToken = Environment.GetEnvironmentVariable("TELEGRAM_TOKEN");

            Bot      = new TelegramBotClient(APIToken);
            Me       = Bot.GetMeAsync().Result;
            ClientId = Guid.NewGuid();
            new Thread(KeepAlive).Start();
            Console.Title = $"{ClientId} - {Version.FileVersion}";
            Thread.Sleep(-1);
        }
예제 #5
0
    void Awake()
    {
#if UNITY_EDITOR
        var awaken = UnityLua.GlobalLua["___EDITOR_AWAKEN"].ConvertType <int>();
        if (awaken == 0)
        {
            UnityLua.GlobalLua["___EDITOR_AWAKEN"] = 1.WrapDynamic();

            ResManager.RecordCacheVersion("editor", int.MaxValue);
            LanguageConverter.InitData();
            string pathCachedMain = LuaFramework.AppDataPath + "/CapstonesScripts/spt/init.lua";
            if (UnityLua.GlobalLua.DoFile(pathCachedMain) == 0)
            {
            }
            else
            {
                if (GLog.IsLogErrorEnabled)
                {
                    GLog.LogError(UnityLua.GlobalLua.L.GetLua(-1).UnwrapDynamic());
                }
            }
        }
#endif
        BindLua();
        _Awaken = true;
        if (_DestroyRegIndex > 0)
        {
            RemoveDestroyRegIndex(_DestroyRegIndex);
            _DestroyRegIndex = 0;
        }
        CallLuaFunc("awake"); // Notice! The awake will NOT be called for the runtime binded behaviours!
    }
예제 #6
0
 private static string GetLocaleString(string key, string language, params object[] args)
 {
     try
     {
         var       files = Directory.GetFiles(Bot.LanguageDirectory);
         XDocument doc;
         var       file = files.First(x => Path.GetFileNameWithoutExtension(x) == language);
         {
             doc = LanguageConverter.Load(file);
         }
         var strings = doc.Descendants("string").FirstOrDefault(x => x.Attribute("key").Value == key) ??
                       Bot.English.Descendants("string").FirstOrDefault(x => x.Attribute("key").Value == key);
         var values   = strings.Descendants("value");
         var choice   = Bot.R.Next(values.Count());
         var selected = values.ElementAt(choice);
         return(string.Format(selected.Value.FormatHTML(), args).Replace("\\n", Environment.NewLine));
     }
     catch (Exception)
     {
         var strings  = Bot.English.Descendants("string").FirstOrDefault(x => x.Attribute("key").Value == key);
         var values   = strings.Descendants("value");
         var choice   = Bot.R.Next(values.Count());
         var selected = values.ElementAt(choice);
         return(string.Format(selected.Value.FormatHTML(), args).Replace("\\n", Environment.NewLine));
     }
 }
예제 #7
0
    public static void loadData()
    {
        lan     = LanguageConverter.convertLan(Application.systemLanguage.ToString().ToLower());
        xmlData = new XmlDocument();
        TextAsset textAsset = Resources.Load("Translation/MainScreen") as TextAsset;

        xmlData.LoadXml(textAsset.text);
    }
예제 #8
0
        public static string GetMonth()
        {
            var month       = DateTime.Now.Month;
            var year        = DateTime.Now.Year;
            var banglaMonth = MonthMap.GetMonthData()[month - 1].MonthNameInBangla;
            var yearBangla  = LanguageConverter.EnglishToBangla(year + "");

            return(banglaMonth + "/" + yearBangla);
        }
예제 #9
0
 public LangFile(string path)
 {
     Doc          = LanguageConverter.Load(path);
     Name         = Doc.Descendants("language").First().Attribute("name")?.Value;
     Base         = Doc.Descendants("language").First().Attribute("base")?.Value;
     Variant      = Doc.Descendants("language").First().Attribute("variant")?.Value;
     FilePath     = path;
     FileName     = Path.GetFileNameWithoutExtension(path);
     LatestUpdate = File.GetLastWriteTimeUtc(path);
 }
예제 #10
0
        public static void Initialize(string updateid = null)
        {
            //get api token from registry
            var key =
                RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
                .OpenSubKey("SOFTWARE\\Werewolf");

            TelegramApiKey = key.GetValue("ProductionAPI").ToString();

            Api = new Client(TelegramApiKey, LogDirectory);

            English = LanguageConverter.Load(Path.Combine(LanguageDirectory, "English.yaml"));

            //load the commands list
            foreach (var m in typeof(Commands).GetMethods())
            {
                var c = new Command();
                foreach (var a in m.GetCustomAttributes(true))
                {
                    if (!(a is Attributes.Command ca))
                    {
                        continue;
                    }

                    c.Blockable       = ca.Blockable;
                    c.DevOnly         = ca.DevOnly;
                    c.GlobalAdminOnly = ca.GlobalAdminOnly;
                    c.GroupAdminOnly  = ca.GroupAdminOnly;
                    c.Trigger         = ca.Trigger;
                    c.Method          = (ChatCommandMethod)Delegate.CreateDelegate(typeof(ChatCommandMethod), m);
                    c.InGroupOnly     = ca.InGroupOnly;
                    Commands.Add(c);
                }
            }

            Api.InlineQueryReceived   += UpdateHandler.InlineQueryReceived;
            Api.UpdateReceived        += UpdateHandler.UpdateReceived;
            Api.CallbackQueryReceived += UpdateHandler.CallbackReceived;
            Api.ReceiveError          += ApiOnReceiveError;
            //Api.OnReceiveGeneralError += ApiOnOnReceiveGeneralError;
            Api.StatusChanged += ApiOnStatusChanged;
            //Api.UpdatesReceived += ApiOnUpdatesReceived;
            Me = Api.GetMeAsync().Result;
            //Api.OnMessage += ApiOnOnMessage;
            Console.Title += " " + Me.Username;
            if (!string.IsNullOrEmpty(updateid))
            {
                Api.SendTextMessageAsync(updateid, "Control updated\n" + Program.GetVersion());
            }

            StartTime = DateTime.UtcNow;

            //now we can start receiving
            Api.StartReceiving();
        }
예제 #11
0
        public static string GetLanguageName(string baseName)
        {
            var       files = Directory.GetFiles(Bot.LanguageDirectory);
            XDocument doc;
            var       file = files.First(x => Path.GetFileNameWithoutExtension(x) == baseName);
            {
                doc = LanguageConverter.Load(file);
            }
            var langNode = doc.Descendants("language").First();

            return($"{langNode.Attribute("base").Value}"); // - {langNode.Attribute("variant").Value}
        }
예제 #12
0
        public static string GetAllowanceFromDb(string searchString)
        {
            _db = new BUEMSDbContext();
            string all     = "০";
            var    results = from a in _db.Allowances
                             where a.DutyName.Equals(searchString)
                             select a;

            foreach (Allowance allowance in results)
            {
                all = allowance.AllowanceAmount;
            }
            return(LanguageConverter.BanglaToEnglish(all));
        }
예제 #13
0
        static void Main(string[] args)
        {
            _ = args;

            //コメントをチャット出力します
            Debug.ChatLocalToSelf = false;
            Debug.ChatToAll       = true;
            LanguageConverter.SetLocalLang(LanguageConverter.LocalLang.Japanese);

            //RootAIFileクラスを継承したクラスを生成して
            //OutputFiles()で、.aiファイルと関連する.perファイルを出力します。
            new AISharp2(
                @"C:\Program Files (x86)\Steam\steamapps\common\Age2HD\resources\_common\ai",
                "S.T"
                ).OutputFiles();
        }
예제 #14
0
 public static int UpdateLanguageConverter(IntPtr l)
 {
     if (l.istable(1))
     {
         Dictionary <string, string> updatedMap = new Dictionary <string, string>();
         l.pushnil();
         while (l.next(1))
         {
             string key, val;
             l.GetLua(-2, out key);
             l.GetLua(-1, out val);
             if (key != null)
             {
                 updatedMap[key] = val;
             }
             l.pop(1);
         }
         LanguageConverter.UpdateDict(updatedMap);
     }
     return(0);
 }
    private string FormatMessage(string msg)
    {
        if (FormatMessageFunc != null)
        {
            return(FormatMessageFunc(msg));
        }
        string val = LanguageConverter.GetLangValue(msg);

        if (val == null || ReferenceEquals(val, msg))
        {
            if (DefaultFormatMessageDict.TryGetValue(msg, out val))
            {
                return(val);
            }
        }
        else
        {
            return(val);
        }
        return(msg);
    }
예제 #16
0
        public ActionResult NewIndex(string month, string year)
        {
            if (month.Equals("") && year.Equals(""))
            {
                DateTime dateTime = DateTime.Now;
                int      monthInt = dateTime.Month;

                month = MonthMap.GetMonthData()[monthInt].MonthNameInEnglish;
                int yearInt = dateTime.Year;
                year = yearInt + "";
            }

            var    data         = MonthMap.GetMonthData().Find(i => i.MonthNameInEnglish.Equals(month));
            var    monthBangla  = data.MonthNameInBangla;
            var    yearBangla   = LanguageConverter.EnglishToBangla(year);
            string searchString = monthBangla + "/" + yearBangla;

            var datam = from a in db.Salaries
                        where a.Month.Equals(searchString)
                        select a;

            return(Json(datam, JsonRequestBehavior.AllowGet));
        }
예제 #17
0
    //public void EditorPrepareLuaRes()
    //{
    //    ResManager.ResLoader.Init();
    //    LanguageConverter.Init();
    //}
    void Awake()
    {
#if UNITY_EDITOR
        var awaken = GlobalLua.L["___EDITOR_AWAKEN"].ConvertType <int>();
        if (awaken == 0)
        {
            GlobalLua.EditorCheckRunningState();
            GlobalLua.L["___EDITOR_AWAKEN"] = 1;

            //Init();
            //EditorPrepareLuaRes();

            //var l = GlobalLua.L.L;
            //l.pushcfunction(LuaHub.LuaFuncOnError); // err
            //l.GetGlobal("require"); // err require
            //l.PushString("init"); // err require "main"
            //if (l.pcall(1, 0, -3) == 0)
            //{
            //    l.pop(1);
            //}
            //else
            //{
            //    DynamicHelper.LogError(l.GetLua(-1));
            //    l.pop(2);
            //}
        }
#endif
        BindLua();
        LanguageConverter.IterateText(transform);
        _Awaken = true;
        if (_DestroyRegIndex > 0)
        {
            RemoveDestroyRegIndex(_DestroyRegIndex);
            _DestroyRegIndex = 0;
        }
        CallLuaFunc("awake"); // Notice! The awake will NOT be called for the runtime binded behaviours!
    }
예제 #18
0
        private static void Main(string[] args)
        {
            //set up exception logging.  It appears nodes are crashing and I'm not getting any output
            AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
            {
                var ex = eventArgs.ExceptionObject as Exception;
                using (var sw = new StreamWriter(Path.Combine(RootDirectory, "../Logs/NodeFatalError.log"), true))
                {
                    sw.WriteLine($"{DateTime.Now} - {Version} - {ex.Message}");
                    sw.WriteLine(ex.StackTrace);
                    while (ex.InnerException != null)
                    {
                        ex = ex.InnerException;
                        sw.WriteLine($"{ex.Message}");
                        sw.WriteLine(ex.StackTrace);
                    }

                    sw.WriteLine("--------------------------------------------------------");
                }
            };
            English = LanguageConverter.Load(Path.Combine(LanguageDirectory, "English.yaml"));


            //get api token from registry
            var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
                      .OpenSubKey("SOFTWARE\\Werewolf");

            APIToken = key.GetValue("ProductionAPI").ToString();

            Bot      = new TelegramBotClient(APIToken);
            Me       = Bot.GetMeAsync().Result;
            ClientId = Guid.NewGuid();
            new Thread(KeepAlive).Start();
            Console.Title = $"{ClientId} - {Version.FileVersion}";
            Thread.Sleep(-1);
        }
        private object BindDictionary(IServiceProvider serviceProvider)
        {
            string uid = _uid ?? GetUid(_target);
            string vid = _property.Name;

            Binding binding = new Binding("Dictionary");
            binding.Source = LanguageContext.Instance;
            binding.Mode = BindingMode.TwoWay;
            LanguageConverter converter = new LanguageConverter(uid, vid, _default);
            if (_parameters.Count == 0)
            {
                binding.Converter = converter;
                object value = binding.ProvideValue(serviceProvider);
                return value;
            }
            else
            {
                MultiBinding multiBinding = new MultiBinding();
                multiBinding.Mode = BindingMode.TwoWay;
                multiBinding.Converter = converter;
                multiBinding.Bindings.Add(binding);
                if (string.IsNullOrEmpty(uid))
                {
                    Binding uidBinding = _parameters[0] as Binding;
                    if (uidBinding == null)
                    {
                        throw new ArgumentException("Uid Binding parameter must be the first, and of type Binding");
                    }
                }
                foreach (Binding parameter in _parameters)
                {
                    multiBinding.Bindings.Add(parameter);
                }
                object value = multiBinding.ProvideValue(serviceProvider);
                return value;
            }
        }
 public void TestInitialize()
 {
     this.testSubject = new LanguageConverter();
 }
예제 #21
0
        private static int ClrFuncGetLangValue(IntPtr l, bool isStringType)
        {
            var oldtop = l.gettop();

            if (l.istable(1))
            {
                l.pushnumber(1); // 1
                l.gettable(1);   // key
                if (l.IsString(-1))
                {
                    string key = l.GetString(-1);
                    l.pop(1); // X
                    var      len  = l.getn(1);
                    object[] args = new object[len - 1];
                    for (int i = 2; i <= len; ++i)
                    {
                        l.pushnumber(i);
                        l.gettable(1);
                        args[i - 2] = l.GetLua(-1);
                        l.pop(1);
                    }

                    string val = LanguageConverter.GetLangValue(key, args);

                    if (isStringType)
                    {
                        l.pushstring(val);
                    }
                    else
                    {
                        l.PushLuaObject(val);
                    }
                    return(1);
                }
                else
                {
                    l.settop(oldtop);
                    return(0);
                }
            }
            else
            {
                if (l.IsString(1))
                {
                    string   key  = l.GetString(1);
                    object[] args = new object[oldtop - 1];
                    for (int i = 2; i <= oldtop; ++i)
                    {
                        args[i - 2] = l.GetLua(i);
                    }

                    string val = LanguageConverter.GetLangValue(key, args);

                    if (isStringType)
                    {
                        l.pushstring(val);
                    }
                    else
                    {
                        l.PushLuaObject(val);
                    }
                    return(1);
                }
                else
                {
                    l.settop(oldtop);
                    return(0);
                }
            }
        }
예제 #22
0
        public static void ValidateFiles(long id, int msgId, string choice = null)
        {
            var errors = new List <LanguageError>();

            //first, let's load up the English file, which is our master file
            var master = LanguageConverter.Load(Path.Combine(Bot.LanguageDirectory, "English.yaml"));

            foreach (var langfile in Directory.GetFiles(Bot.LanguageDirectory).Where(x => !x.EndsWith("English.yaml"))
                     .Select(x => new LangFile(x)))
            {
                if (langfile.Base == choice || choice == null)
                {
                    //first check the language node
                    CheckLanguageNode(langfile, errors);

                    //test the length
                    TestLength(langfile, errors);

                    //get the file errors
                    GetFileErrors(langfile, errors, master);
                }
            }

            //now pack up the errors and send
            var result = "";

            foreach (var file in errors.Select(x => x.File).Distinct().ToList())
            {
                var langfile = new LangFile(Path.Combine(Bot.LanguageDirectory, $"{file}.yaml"));
                result += $"*{langfile.FileName}.yaml* (Last updated: {langfile.LatestUpdate.ToString("MMM dd")})\n";
                if (errors.Any(x => x.Level == ErrorLevel.Ads))
                {
                    result += "*Ads detected:";
                    result  = errors.Where(x => x.File == langfile.FileName && x.Level == ErrorLevel.Ads)
                              .Aggregate(result, (current, fileError) => current + fileError.Key + ", ")
                              .TrimEnd(',', ' ') + "\n";
                    continue;
                }

                if (errors.Any(x => x.Level == ErrorLevel.DuplicatedString))
                {
                    result += "_Duplicated Strings: _";
                    result  = errors.Where(x => x.File == langfile.FileName && x.Level == ErrorLevel.DuplicatedString)
                              .Aggregate(result, (current, fileError) => current + fileError.Key + ", ")
                              .TrimEnd(',', ' ') + "\n";
                }

                if (errors.Any(x => x.Level == ErrorLevel.JoinLink))
                {
                    result += "_Join commands: _";
                    result  = errors.Where(x => x.File == langfile.FileName && x.Level == ErrorLevel.JoinLink)
                              .Aggregate(result, (current, fileError) => current + fileError.Key + ", ")
                              .TrimEnd(',', ' ') + "\n";
                }

                result +=
                    $"_Missing strings:_ {errors.Count(x => x.Level == ErrorLevel.MissingString && x.File == langfile.FileName)}\n";
                if (errors.Any(x => x.File == langfile.FileName && x.Level == ErrorLevel.Error))
                {
                    result = errors.Where(x => x.File == langfile.FileName && x.Level == ErrorLevel.Error)
                             .Aggregate(result,
                                        (current, fileError) =>
                                        current + $"_{fileError.Level} - {fileError.Key}_\n{fileError.Message}\n");
                }

                result += "\n";
            }

            Bot.Api.SendTextMessageAsync(id, result, parseMode: ParseMode.Markdown);
            var sortedfiles = Directory.GetFiles(Bot.LanguageDirectory).Select(x => new LangFile(x))
                              .Where(x => x.Base == (choice ?? x.Base)).OrderBy(x => x.LatestUpdate);

            result =
                $"*Validation complete*\nErrors: {errors.Count(x => x.Level == ErrorLevel.Error)}\nMissing strings: {errors.Count(x => x.Level == ErrorLevel.MissingString)}";
            result +=
                $"\nMost recently updated file: {sortedfiles.Last().FileName}.yaml ({sortedfiles.Last().LatestUpdate.ToString("MMM dd")})\nLeast recently updated file: {sortedfiles.First().FileName}.yaml ({sortedfiles.First().LatestUpdate.ToString("MMM dd")})";

            Bot.Api.EditMessageTextAsync(id, msgId, result, ParseMode.Markdown);
        }
예제 #23
0
        public static void UseNewLanguageFile(string fileName, long id, int msgId)
        {
            var msg = "Moving file to production..\n";

            msg += "Checking paths for duplicate language file...\n";
            Bot.Api.EditMessageTextAsync(id, msgId, msg);
            fileName += ".yaml";
            var tempPath    = Bot.TempLanguageDirectory;
            var langPath    = Bot.LanguageDirectory;
            var newFilePath = Path.Combine(tempPath, fileName);
            var copyToPath  = Path.Combine(langPath, fileName);

            //get the new files language
            var doc = LanguageConverter.Load(newFilePath);

            var newFileLang = new
            {
                Name    = doc.Descendants("language").First().Attribute("name").Value,
                Base    = doc.Descendants("language").First().Attribute("base").Value,
                Variant = doc.Descendants("language").First().Attribute("variant").Value
            };


            //check for existing file
            var langs = Directory.GetFiles(langPath).Select(x => new LangFile(x)).ToList();
            var lang  = langs.FirstOrDefault(x => x.Name == newFileLang.Name && x.FilePath != copyToPath);

            if (lang != null)
            {
                msg +=
                    $"Found duplicate language (name attribute) with filename {Path.GetFileNameWithoutExtension(lang.FilePath)}\n";
                copyToPath = lang.FilePath;
            }
            else
            {
                lang = langs.FirstOrDefault(x =>
                                            x.Base == newFileLang.Base && x.Variant == newFileLang.Variant && x.Name != newFileLang.Name);
                if (lang != null)
                {
                    msg +=
                        $"Found duplicate language (matching base and variant) with filename {Path.GetFileNameWithoutExtension(lang.FilePath)}\n";
                    msg += "Aborting!";
                    Bot.Api.EditMessageTextAsync(id, msgId, msg);
                    return;
                }
            }


            File.Copy(newFilePath, copyToPath, true);
            msg += "File copied to bot\n";
//#if RELEASE
//            msg += $"File copied to bot 1\n";
//#elif RELEASE2
//            msg += $"File copied to bot 2\n";
//#endif
            //Bot.Api.EditMessageTextAsync(id, msgId, msg);
//#if RELEASE
//            copyToPath = copyToPath.Replace("Werewolf 3.0", "Werewolf 3.0 Clone");
//            System.IO.File.Copy(newFilePath, copyToPath, true);
//            msg += $"File copied to bot 2\n";
//            Bot.Api.EditMessageTextAsync(id, msgId, msg);
//#endif
            var gitPath = Path.Combine(@"C:\Werewolf Source\Werewolf\Werewolf for Telegram\Languages",
                                       Path.GetFileName(copyToPath));

            File.Copy(newFilePath, gitPath, true);
            File.Delete(newFilePath);
            msg += $"File copied to git directory\n";
            if (newFilePath.EndsWith("English.yaml"))
            {
                var p = new Process
                {
                    StartInfo =
                    {
                        FileName               = @"C:\Werewolf Source\Werewolf\Werewolf for Telegram\Languages\commit.bat",
                        Arguments              = $"\"Syncing langfiles from Telegram (English.yaml update)\"",
                        WorkingDirectory       = @"C:\Werewolf Source\Werewolf\Werewolf for Telegram\Languages",
                        UseShellExecute        = false,
                        RedirectStandardOutput = true,
                        RedirectStandardError  = true,
                        CreateNoWindow         = true
                    }
                };

                p.Start();
                msg += "Started the committing process. Reading output from git...";
                Bot.Edit(id, msgId, msg);

                var output = "";
                while (!p.StandardOutput.EndOfStream)
                {
                    output += p.StandardOutput.ReadLine() + Environment.NewLine;
                }

                while (!p.StandardError.EndOfStream)
                {
                    output += p.StandardError.ReadLine() + Environment.NewLine;
                }

                msg += "\nValidating the output...";
                Bot.Edit(id, msgId, msg);

                //validate the output
                if (output.Contains("failed"))
                {
                    msg += "\n<b>Failed</b> to commit files. See control output for information";
                    Console.WriteLine(output);
                }
                else if (output.Contains("nothing to commit"))
                {
                    msg += "\nNothing to commit.";
                }
                else
                {
                    //try to grab the commit
                    var regex  = new Regex("(\\[master .*])");
                    var match  = regex.Match(output);
                    var commit = "";
                    if (match.Success)
                    {
                        commit = match.Value.Replace("[master ", "").Replace("]", "");
                    }

                    msg +=
                        $"\n<b>Files committed successfully.</b> {(string.IsNullOrEmpty(commit) ? "" : $"<a href=\"https://github.com/GreyWolfDev/Werewolf/commit/" + commit + $"\">{commit}</a>")}";
                }
            }

            msg += "\n<b>Operation complete.</b>";

            Bot.Api.EditMessageTextAsync(id, msgId, msg, ParseMode.Html);
        }
예제 #24
0
        internal static void UploadFile(string fileid, long id, string newFileCorrectName, int msgID)
        {
            var file = Bot.Api.GetFileAsync(fileid).Result;
            var path = Directory.CreateDirectory(Bot.TempLanguageDirectory);
            //var fileName = file.FilePath.Substring(file.FilePath.LastIndexOf("/") + 1);
            var uri         = $"https://api.telegram.org/file/bot{Bot.TelegramApiKey}/{file.FilePath}";
            var newFilePath = Path.Combine(path.FullName, newFileCorrectName);

            using (var client = new WebClient())
            {
                client.DownloadFile(new Uri(uri), newFilePath);
            }


            //ok, we have the file.  Now we need to determine the language, scan it and the original file.
            var newFileErrors = new List <LanguageError>();
            //first, let's load up the English file, which is our master file
            var langs   = Directory.GetFiles(Bot.LanguageDirectory, "*.yaml").Select(x => new LangFile(x));
            var master  = LanguageConverter.Load(Path.Combine(Bot.LanguageDirectory, "English.yaml"));
            var newFile = new LangFile(newFilePath);

            //make sure it has a complete langnode
            CheckLanguageNode(newFile, newFileErrors);

            //test the length
            TestLength(newFile, newFileErrors);

            //check uniqueness
            var error = langs.FirstOrDefault(x =>
                                             x.FileName.ToLower() == newFile.FileName.ToLower() &&
                                             x.Name != newFile.Name || //check for matching filename and mismatching name
                                             x.Name == newFile.Name &&
                                             (x.Base != newFile.Base ||
                                              x.Variant != newFile.Variant) || //check for same name and mismatching base-variant
                                             x.Base == newFile.Base && x.Variant == newFile.Variant &&
                                             x.FileName != newFile.FileName //check for same base-variant and mismatching filename
                                                                            //if we want to have the possibility to rename the file, change previous line with FileName -> Name
                                             );

            if (error != null)
            {
                //problem....
                newFileErrors.Add(new LanguageError(newFile.FileName, "*Language Node*",
                                                    $"ERROR: The following file partially matches the same language node. Please check the file name, and the language name, base and variant. Aborting.\n\n*{error.FileName}.yaml*\n_Name:_{error.Name}\n_Base:_{error.Base}\n_Variant:_{error.Variant}",
                                                    ErrorLevel.FatalError));
            }

            //get the errors in it
            GetFileErrors(newFile, newFileErrors, master);

            //need to get the current file
            var curFile       = langs.FirstOrDefault(x => x.Name == newFile.Name);
            var curFileErrors = new List <LanguageError>();

            if (curFile != null)
            {
                //test the length
                TestLength(curFile, curFileErrors);

                ////validate current file name / base / variants match
                //if (newFile.Base != lang.Base)
                //{
                //    newFileErrors.Add(new LanguageError(curFileName, "Language Node", $"Mismatched Base! {newFile.Base} - {lang.Base}", ErrorLevel.Error));
                //}
                //if (newFile.Variant != lang.Variant)
                //{
                //    newFileErrors.Add(new LanguageError(curFileName, "Language Node", $"Mismatched Variant! {newFile.Variant} - {lang.Variant}", ErrorLevel.Error));
                //}

                //get the errors in it
                GetFileErrors(curFile, curFileErrors, master);
            }

            //send the validation result
            Bot.Api.SendTextMessageAsync(id, OutputResult(newFile, newFileErrors, curFile, curFileErrors),
                                         parseMode: ParseMode.Markdown);
            Thread.Sleep(500);


            if (newFileErrors.All(x => x.Level != ErrorLevel.FatalError && x.Level != ErrorLevel.Ads))
            {
                //load up each file and get the names
                var buttons = new[]
                {
                    new InlineKeyboardCallbackButton($"New", $"upload|{id}|{newFile.FileName}"),
                    new InlineKeyboardCallbackButton($"Old", $"upload|{id}|current")
                };
                var menu = new InlineKeyboardMarkup(buttons.ToArray());
                Bot.Api.SendTextMessageAsync(id, "Which file do you want to keep?", replyToMessageId: msgID,
                                             replyMarkup: menu);
            }
            else
            {
                Bot.Api.SendTextMessageAsync(id, "Fatal errors present, cannot upload.", replyToMessageId: msgID);
            }
        }
예제 #25
0
        public static void ValidateLanguageFile(long id, string filePath, int msgId)
        {
            var errors   = new List <LanguageError>();
            var langfile = new LangFile(filePath);

            //first, let's load up the English file, which is our master file
            var master = LanguageConverter.Load(Path.Combine(Bot.LanguageDirectory, "English.yaml"));

            //first check the language node
            CheckLanguageNode(langfile, errors);

            //now test the length
            TestLength(langfile, errors);

            //get the errors
            GetFileErrors(langfile, errors, master);

            //send the result
            var result = $"*{langfile.FileName}.yaml* (Last updated: {langfile.LatestUpdate:MMM dd})" +
                         Environment.NewLine;

            if (errors.Any(x => x.Level == ErrorLevel.Ads))
            {
                result += "*ADS DETECTED*\n";
                result  = errors.Where(x => x.Level == ErrorLevel.Error)
                          .Aggregate(result, (current, fileError) => current + $"{fileError.Key}\n");
            }
            else
            {
                if (errors.Any(x => x.Level == ErrorLevel.Error))
                {
                    result += "_Errors:_\n";
                    result  = errors.Where(x => x.Level == ErrorLevel.Error).Aggregate(result,
                                                                                       (current, fileError) => current + $"{fileError.Key}\n{fileError.Message}\n\n");
                }

                if (errors.Any(x => x.Level == ErrorLevel.MissingString))
                {
                    result += "_Missing Values:_\n";
                    result  = errors.Where(x => x.Level == ErrorLevel.MissingString)
                              .Aggregate(result, (current, fileError) => current + $"{fileError.Key}\n");
                }

                if (errors.Any(x => x.Level == ErrorLevel.DuplicatedString))
                {
                    result += "\n_Duplicated Strings:_\n";
                    result  = errors.Where(x => x.Level == ErrorLevel.DuplicatedString)
                              .Aggregate(result, (current, fileError) => current + fileError.Key + ", ")
                              .TrimEnd(',', ' ') + "\n";
                }

                if (errors.Any(x => x.Level == ErrorLevel.JoinLink))
                {
                    result += "\n_Join commands:_\n";
                    result  = errors.Where(x => x.Level == ErrorLevel.JoinLink)
                              .Aggregate(result, (current, fileError) => current + fileError.Key + ", ")
                              .TrimEnd(',', ' ') + "\n";
                }

                if (errors.Any(x => x.Level == ErrorLevel.FatalError))
                {
                    result += "\n*Fatal errors:*\n";
                    result  = errors.Where(x => x.Level == ErrorLevel.FatalError).Aggregate(result,
                                                                                            (current, fileError) => current + $"{fileError.Key}\n{fileError.Message}\n");
                }
            }

            result += "\n";
            //Program.Send(result, id);
            Thread.Sleep(500);
            result +=
                $"*Validation complete*.\nErrors: {errors.Count(x => x.Level == ErrorLevel.Error)}\nMissing strings: {errors.Count(x => x.Level == ErrorLevel.MissingString)}";
            Bot.Api.EditMessageTextAsync(id, msgId, result, ParseMode.Markdown);
        }
예제 #26
0
 public void TestInitialize()
 {
     this.testSubject = new LanguageConverter();
 }
예제 #27
0
        public FileResult LanguageConverter(RemoveHtmlModel model, string lang)
        {
            string result;
            var converter = new LanguageConverter();

            switch (lang)
            {
                case "en-us":
                    result = converter.BritishToAmericanEnglish(model.Html);
                    break;
                default:
                    result = converter.AmericanToBritishEnglish(model.Html);
                    break;
            }

            return this.File(Encoding.Unicode.GetBytes(result), "text/plain", "convert-english.txt");
        }