Example #1
0
        public Task ScholarAsync([Remainder][Summary("The search query")] string query)
        {
            string      mentions = String.Empty;
            List <long> userHis  = new List <long>();

            foreach (string tag in query.Split(" "))
            {
                AddUserHistory(tag, Context.User.Id);

                if (UserHistory.ContainsKey(tag))
                {
                    foreach (long idTag in UserHistory[tag])
                    {
                        if (!userHis.Contains(idTag))
                        {
                            userHis.Add(idTag);
                        }
                    }
                }
            }

            foreach (long ids in userHis)
            {
                mentions += $"<@{ids}> ";
            }

            GoogleTranslator translator = new GoogleTranslator();

            TranslationResult portuguese = translator.TranslateLiteAsync(query, Language.English, Language.Portuguese).GetAwaiter().GetResult();
            TranslationResult english    = translator.TranslateLiteAsync(query, Language.Portuguese, Language.English).GetAwaiter().GetResult();

            return(ReplyAsync($"Pesquisa em portugues: https://scholar.google.com/scholar?q={portuguese.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')} \nEnglish search: https://scholar.google.com/scholar?q={english.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')}\n Outra pessoa que tambem pesquisou: {mentions}"));
        }
Example #2
0
        public Task GoogleAsync([Remainder][Summary("The thing to search for")] string search)
        {
            foreach (string tag in search.Split(" "))
            {
                IncreaseTagCoung(tag);
            }

            GoogleTranslator translator = new GoogleTranslator();

            TranslationResult portuguese = translator.TranslateLiteAsync(search, Language.English, Language.Portuguese).GetAwaiter().GetResult();
            TranslationResult english    = translator.TranslateLiteAsync(search, Language.Portuguese, Language.English).GetAwaiter().GetResult();

            return(ReplyAsync($"Pesquisa em portugues: https://www.google.com/search?q={portuguese.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')} \nEnglish search: https://www.google.com/search?q={english.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')}"));
        }
Example #3
0
        public async Task <Result> Translate(string text, string to, string from = "en")
        {
            try
            {
                var fromLang = GoogleTranslator.GetLanguageByISO(from) ?? Language.Auto;;
                var toLang   = GoogleTranslator.GetLanguageByISO(to);
                if (fromLang == null || toLang == null)
                {
                    return(new Result(ErrorCode.LanguageNotRecognized));
                }

                var result = await _client.TranslateLiteAsync(text, fromLang, toLang);

                return(new Result(result.MergedTranslation));
            }
            catch (HttpRequestException ex)
            {
                Console.WriteLine("Error: " + ex.Message);
                if (ex.Message.Contains("429"))
                {
                    return(new Result(ErrorCode.TooManyRequests));
                }
                return(new Result(ErrorCode.UnknownError));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
                return(new Result(ErrorCode.UnknownError));
            }
        }
Example #4
0
        private static async Task <string> Translate(string buf)
        {
            int retry       = 10;
            var buf_escaped = Regex.Escape(buf);

            if (lookup.ContainsKey(buf_escaped))
            {
                Console.WriteLine("Cache hit! " + buf_escaped);
                return(Regex.Unescape(lookup[buf_escaped]));
            }
            while (retry != 0)
            {
                try
                {
                    Language from = Language.Auto;
                    Language to   = GoogleTranslator.GetLanguageByName("Korean");

                    TranslationResult result = await _translator.TranslateLiteAsync(buf, from, to);

                    string resultMerged       = result.MergedTranslation;
                    var    translated_escpaed = Regex.Escape(resultMerged);
                    lookup[buf_escaped] = translated_escpaed;
                    Save();
                    return(resultMerged);
                }
                catch (Exception error)
                {
                    _translator = new GoogleTranslator();
                    Console.WriteLine(error);
                    retry--;
                }
            }
            return("ERROR");
        }
Example #5
0
        /// <summary>
        /// Translate
        /// </summary>
        /// <returns></returns>
        private async Task Translate()
        {
            GoogleTranslator translator = new GoogleTranslator();

            GoogleTranslateFreeApi.Language languageFrom = GoogleTranslateFreeApi.Language.Auto;
            // GoogleTranslateFreeApi.Language languageTo = GoogleTranslator.GetLanguageByName("Korean");
            GoogleTranslateFreeApi.Language languageTo = GoogleTranslator.GetLanguageByName(SelectTranslate(comboBox_LanguageTrans.SelectedIndex));

            try
            {
                // TranslateAsync TranslateLiteAsync
                TranslationResult translationResult = await translator.TranslateLiteAsync(textBox_Extract.Text, languageFrom, languageTo);

                string[] strResultSeparated = translationResult.FragmentedTranslation;

                string strTranslate = "";

                foreach (string strtmp in strResultSeparated)
                {
                    strTranslate += (strtmp + "\n");
                }

                label_ErrorTranslate.Visible = false;
                textBox_Translate.Text       = strTranslate;
            }
            catch (Exception)// ex)
            {
                label_ErrorTranslate.Visible = true;
                textBox_Translate.Text       = "";
            }
        }
Example #6
0
        private async void Translate()
        {
            if (LblEnglish.Text.Trim().Length >= 0)
            {
                BtnSave.IsEnabled      = false;
                BtnTranslate.IsEnabled = false;
                var translator = new GoogleTranslator();

                Language from = GoogleTranslateFreeApi.Language.English;
                Language to   = GoogleTranslateFreeApi.Language.Persian;

                TranslationResult result = await translator.TranslateLiteAsync(LblEnglish.Text.Trim(), from, to);

                //The result is separated by the suggestions and the '\n' symbols
                string[] resultSeparated = result.FragmentedTranslation;

                //You can get all text using MergedTranslation property
                string resultMerged = result.MergedTranslation;
                LblPersian.Text = resultMerged;
                //There is also original text transcription
                string transcription = result.TranslatedTextTranscription;
                BtnSave.IsEnabled      = true;
                BtnTranslate.IsEnabled = true;
            }
        }
Example #7
0
        private static async Task Translate(FileInfo resxFile, string from, string to)
        {
            var content     = root.Load(resxFile);
            var destination = root.Load(resxFile);

            var novoArquivo = Path.Combine(resxFile.Directory.FullName,
                                           Path.GetFileNameWithoutExtension(resxFile.Name).Replace(from, to) + Path.GetExtension(resxFile.Name));

            if (File.Exists(novoArquivo))
            {
                return;
            }

            var translator = new GoogleTranslator();

            var languageFrom = GoogleTranslator.GetLanguageByISO(from.ToLower());
            var languageTo   = GoogleTranslator.GetLanguageByISO(to.ToLower());

            foreach (var rootData in content.data)
            {
                var result = await translator.TranslateLiteAsync(rootData.value, languageFrom, languageTo);

                destination.data.First(f => f.name == rootData.name).value = result.MergedTranslation;
                Console.WriteLine($"{rootData.name} - {rootData.value} -> {result.MergedTranslation}");
            }
            destination.SerializeTo(novoArquivo);
        }
        private async Task <string[]> TranslateText(string text, Language from, Language to)
        {
            TranslationResult result = await translateInstance.TranslateLiteAsync(text, from, to);

            return(result.FragmentedTranslation);
            //string resultMerged = result.MergedTranslation;
            //string transcription = result.TranslatedTextTranscription;
        }
Example #9
0
        public async Task <TranslationResult> TranslateAsync(string text, string to)
        {
            var result = await Translator
                         .TranslateLiteAsync(text, Language.Auto, GoogleTranslator.GetLanguageByName(to))
                         .ConfigureAwait(false);

            return(result);
        }
Example #10
0
        public string Translate(string s, IMessage m, string targetLanguage = "English", string sourceLanguage = "")
        {
            Language from = string.IsNullOrWhiteSpace(sourceLanguage) ? Language.Auto : GoogleTranslator.GetLanguageByName(sourceLanguage);
            Language to   = GoogleTranslator.GetLanguageByName(targetLanguage);

            TranslationResult result = translator.TranslateLiteAsync(s, from, to).Result;

            return(result.MergedTranslation);
        }
Example #11
0
        public static async Task <TranslationResult> TranslateAsync(this string forTranslate, string toLang)
        {
            var translator = new GoogleTranslator();
            var from       = Language.Auto;
            var to         = GoogleTranslator.GetLanguageByISO(toLang);

            var result = await translator.TranslateLiteAsync(forTranslate, from, to)
                         .ConfigureAwait(false);

            return(result);
        }
Example #12
0
        public static async Task <TranslatedText> Translate(string text, string finalLanguage, string originalLanguage = "Auto")
        {
            var      translator = new GoogleTranslator();
            Language to         = GoogleTranslator.GetLanguageByName(finalLanguage);
            Language from       = GoogleTranslator.GetLanguageByName(originalLanguage);

            var translated = await translator.TranslateLiteAsync(text, from, to);

            return(new TranslatedText {
                Original = translated.OriginalText, Translated = translated.MergedTranslation
            });
        }
Example #13
0
        /// <summary>
        /// TODO: Refactor this urgently, use a HTML parser
        /// </summary>
        /// <param name="text"></param>
        /// <param name="origin"></param>
        /// <param name="destination"></param>
        /// <returns></returns>
        public string TranslateText(string text, string origin, string destination)
        {
            var translator = new GoogleTranslator();

            Language from = GoogleTranslator.GetLanguageByISO(origin);
            Language to   = GoogleTranslator.GetLanguageByISO(destination);

            TranslationResult result = translator.TranslateLiteAsync(text, from, to).GetAwaiter().GetResult();

            var translated = FixTranslation(result.MergedTranslation);

            return(translated);
        }
Example #14
0
        private async Task Translate(TextBox txtSource, TextBox txtDest)
        {
            var translator = new GoogleTranslator();

            Language from = Language.Auto;
            Language to   = GoogleTranslator.GetLanguageByISO("ar");

            TranslationResult result = await translator.TranslateLiteAsync(txtSource.Text, from, to);

            //You can get all text using MergedTranslation property
            string resultMerged = result.MergedTranslation;

            txtDest.Text = resultMerged;
        }
Example #15
0
        public async Task <string> Get(string misspellingsText)
        {
            var translator = new GoogleTranslator();

            var result = await translator.TranslateLiteAsync(misspellingsText, Language.Auto, Language.English);

            if (result.Corrections.CorrectedText != null)
            {
                return(result.Corrections.CorrectedText);
            }
            else
            {
                return(misspellingsText);
            }
        }
Example #16
0
        public async static System.Threading.Tasks.Task <string> TranslateText(string text)
        {
            if (text.ToLower().Contains("mondays"))
            {
                text = "monday";
            }
            if (text.ToLower().Contains("tuesdays"))
            {
                text = "tuesday";
            }
            if (text.ToLower().Contains("wednesdays"))
            {
                text = "wednesday";
            }
            if (text.ToLower().Contains("thursdays"))
            {
                text = "thursday";
            }
            if (text.ToLower().Contains("fridays"))
            {
                text = "monday";
            }
            if (text.ToLower().Contains("saturdays"))
            {
                text = "saturday";
            }
            if (text.ToLower().Contains("sundays"))
            {
                text = "sunday";
            }

            var translator = new GoogleTranslator();

            Language from = Language.English;
            Language to   = GoogleTranslator.GetLanguageByName("Spanish");

            TranslationResult result = await translator.TranslateLiteAsync(text, from, to);

            text = result.MergedTranslation;


            return(text);
        }
Example #17
0
        public async static System.Threading.Tasks.Task <List <Genre> > TranslateGenres(List <Genre> genres)
        {
            List <Genre> genresNew = new List <Genre>();

            foreach (var item in genres)
            {
                var translator = new GoogleTranslator();

                Language from = Language.English;
                Language to   = GoogleTranslator.GetLanguageByName("Spanish");

                TranslationResult result = await translator.TranslateLiteAsync(item.name, from, to);

                item.name = result.MergedTranslation;

                genresNew.Add(item);
            }

            return(genresNew);
        }
Example #18
0
        public async static System.Threading.Tasks.Task <List <Anime> > TranslateAnime(List <Anime> anime)
        {
            List <Anime> animeNew = new List <Anime>();

            foreach (var item in anime)
            {
                var translator = new GoogleTranslator();

                Language from = Language.English;
                Language to   = GoogleTranslator.GetLanguageByName("Spanish");

                TranslationResult result = await translator.TranslateLiteAsync(item.synopsis, from, to);

                item.synopsis = result.MergedTranslation;

                animeNew.Add(item);
            }

            return(animeNew);
        }
Example #19
0
        public async Task <string> Get(string from, string to, string text)
        {
            var translator = new GoogleTranslator();

            Language From;

            if (from != "Auto")
            {
                From = GoogleTranslator.GetLanguageByName(from);
            }
            else
            {
                From = Language.Auto;
            }

            Language To = GoogleTranslator.GetLanguageByName(to);

            TranslationResult result = await translator.TranslateLiteAsync(text, From, To);

            return(result.MergedTranslation);
        }
Example #20
0
        public async static Task <IList <string> > TranslateDescription(IList <string> list, string isoLanguageTo)
        {
            string description = string.Join("|", list);

            var               translate = new GoogleTranslator();
            Language          fromLang  = Language.Auto;
            Language          from      = GoogleTranslator.GetLanguageByISO(fromLang.FullName);
            Language          to        = GoogleTranslator.GetLanguageByName(isoLanguageTo);
            TranslationResult result    = await translate.TranslateLiteAsync(description, fromLang, to);

            //The result is separated by the suggestions and the '\n' symbols
            string[] resultSeparated = result.FragmentedTranslation;

            //You can get all text using MergedTranslation property
            string resultMerged = result.MergedTranslation;

            //There is also original text transcription
            string transcription = result.TranslatedTextTranscription; // Kon'nichiwa! Ogenkidesuka?

            return(resultMerged.Split('|').Select(x => x.TrimStart()).ToList());
        }
Example #21
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var translator = new GoogleTranslator();

            Language from = Language.Auto;
            Language to   = GoogleTranslator.GetLanguageByName("Japanese");
            //TranslationResult result = await translator.TranslateLiteAsync("Hello. How are you?", from, to);
            TranslationResult result = await translator.TranslateLiteAsync("Hello. How are you?", from, to);

            //The result is separated by the suggestions and the '\n' symbols
            string[] resultSeparated = result.FragmentedTranslation;

            //You can get all text using MergedTranslation property
            string resultMerged = result.MergedTranslation;

            //There is also original text transcription
            string transcription = result.TranslatedTextTranscription; // Kon'nichiwa! Ogenkidesuka?

            Console.WriteLine("Ok");
        }
Example #22
0
        private static async Task HandleMessageAsync(IMessage message)
        {
            if (message == null || message.Channel == null || message.Author.IsBot == true)
            {
                return;
            }

            foreach (var link in _links.ToList().Where(x => x.SourceChannel?.Id == message.Channel.Id))
            {
                if (message.Content.StartsWith(Ditto.Cache.Db.Prefix(link.Link.Guild)))
                {
                    continue;
                }

                if (link.Link == null || link.SourceChannel == null || link.TargetChannel == null || link.SourceLanguage == null || link.TargetLanguage == null)
                {
                    continue;
                }

                var messageContent     = message.Content;
                var messageWithoutTags = messageContent;
                var messageTagStrings  = new List <string>();
                int counter            = 0;

                // Parse discord tags (user, channel, role)
                while (true)
                {
                    var parseResult = messageContent.ParseDiscordTags().Where(x => x.IsSuccess).FirstOrDefault();
                    if (parseResult == null)
                    {
                        break;
                    }

                    messageTagStrings.Add(messageContent.Substring(parseResult.Index, parseResult.Length));
                    messageWithoutTags = messageContent.Remove(parseResult.Index, parseResult.Length);
                    messageContent     = messageContent.Remove(parseResult.Index, parseResult.Length);
                    messageContent     = messageContent.Insert(parseResult.Index, $"{{{counter++}}}");
                }

                // Parse discord emojis.
                while (true)
                {
                    var parseResult = messageContent.ParseDiscordEmojis().FirstOrDefault();
                    if (parseResult == null)
                    {
                        break;
                    }

                    messageTagStrings.Add(messageContent.Substring(parseResult.Index, parseResult.Length));
                    messageWithoutTags = messageContent.Remove(parseResult.Index, parseResult.Length);
                    messageContent     = messageContent.Remove(parseResult.Index, parseResult.Length);
                    messageContent     = messageContent.Insert(parseResult.Index, $"{{{counter++}}}");
                }

                // Translate or use original message when unnecessary.
                string translatedMessage = messageContent;
                if (!string.IsNullOrEmpty(messageWithoutTags.Trim()))
                {
                    TranslationResult result = null;
                    try
                    {
                        result = await _translator.TranslateLiteAsync(messageContent, link.SourceLanguage, link.TargetLanguage).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        Log.Debug(ex);
                        return;
                    }
                    translatedMessage = result?.MergedTranslation;
                }

                // Replace the tags with it's original value
                counter = 0;
                foreach (var tag in messageTagStrings)
                {
                    translatedMessage = translatedMessage.Replace($"{{{counter}}}", messageTagStrings.ElementAt(counter));
                    counter++;
                }

                // Send embedded message to the target channel.
                var embedBuilder = new EmbedBuilder()
                                   .WithAuthor(message.Author)
                                   .WithDescription(translatedMessage)
                                   .WithFooter($"🔀 {link.SourceLanguage.FullName} -> {link.TargetLanguage.FullName}, Posted at {message.CreatedAt.UtcDateTime:hh\\:mm} UTC")
                                   .WithColor(Ditto.Cache.Db.EmbedMusicPlayingColour(link.Link.Guild));

                // Send the translated message.
                await link.TargetChannel.EmbedAsync(embedBuilder, options : new RequestOptions()
                {
                    RetryMode = RetryMode.AlwaysRetry
                }).ConfigureAwait(false);

                // Send a secondary message with the attachment if its included.
                if (message.Attachments.Count > 0)
                {
                    var attachmentUrl = message.Attachments.ElementAt(0)?.Url;
                    if (!string.IsNullOrEmpty(attachmentUrl))
                    {
                        await link.TargetChannel.SendMessageAsync(attachmentUrl, options : new RequestOptions()
                        {
                            RetryMode = RetryMode.AlwaysRetry
                        }).ConfigureAwait(false);
                    }
                }

                // Update link with new string value
                await link.UpdateAsync(message.Id).ConfigureAwait(false);
            }
        }
Example #23
0
        static async void FillInTheBlank(dynamic json)
        {
            Console.WriteLine("该题为: 根据中文意思补全所缺单词");
            Console.WriteLine("题目:");
            Console.WriteLine("  " + json.data.stem.content.Value);
            Console.WriteLine("题目翻译:");
            Console.WriteLine("  " + json.data.stem.remark.Value);
            Console.WriteLine("提示(单词前缀): " + json.data.w_tip.Value);
            Console.WriteLine("单词总长度: " + json.data.w_len.Value.ToString());
            Console.WriteLine();

            string    chinese         = json.data.stem.remark.Value;
            string    prefix          = json.data.w_tip.Value;
            int       full_length     = (int)json.data.w_len.Value;
            int       length          = full_length - prefix.Length;
            ArrayList english_results = new ArrayList();

            var translate_result = await translator.TranslateLiteAsync(chinese, Language.Auto, GoogleTranslator.GetLanguageByName("English"));

            foreach (string translation in translate_result.FragmentedTranslation)
            {
                foreach (Match match in Regex.Matches(translation, @"\b" + prefix + "[a-z]{" + length.ToString() + @"}\b"))
                {
                    if (!english_results.Contains(match.Value))
                    {
                        english_results.Add(match.Value);
                    }
                }
            }

            if (english_results.Count > 0)
            {
                Console.WriteLine("根据翻译, 可能的结果如下:");
                foreach (string english_result in english_results)
                {
                    ShowAllEnglishTranslation(english_result, 4);
                }
                Console.WriteLine("是否有正确答案? [y/N]:");
                if (Console.ReadLine() == "y")
                {
                    return;
                }
            }

            var client = new RestClient("https://www.morewords.com/change-max-results");

            client.Timeout = -1;
            var request = new RestRequest(Method.POST);

            request.AddHeader("Referer", @"https://www.morewords.com/search?w=" + prefix + @"*&length=" + full_length.ToString() + @"&sort=alpha-az");
            request.AlwaysMultipartFormData = true;
            request.AddParameter("max_results", "all");
            var response  = client.Execute(request).Content;
            int pre_count = english_results.Count;

            foreach (Match match in Regex.Matches(response, prefix + "[a-z]{" + length + "}"))
            {
                string english_result = match.Value.Substring(0, full_length);
                if (!english_results.Contains(english_result))
                {
                    english_results.Add(english_result);
                }
            }
            english_results.RemoveRange(0, pre_count);

            if (english_results.Count > 0)
            {
                Console.WriteLine("所有可能的结果如下:");
                foreach (string english_result in english_results)
                {
                    ShowAllEnglishTranslation(english_result, 4);
                }
                return;
            }

            Console.WriteLine("没有找到合适的词, 应该是个bug, 告辞(逃");
        }
        public MainPageViewModel()
        {
            var status = new Subject <MainPageStatus>();

            status.ObserveOnDispatcher()
            .ToPropertyEx(this, x => x.Status);

            BuildTranslatedTextFontSizeProcessor();

            StatusTappedCommand = ReactiveCommand.Create <TappedRoutedEventArgs>(_ =>
            {
                status.OnNext(Status != MainPageStatus.Pause ? MainPageStatus.Pause : MainPageStatus.Normal);
            });

            var translator = new GoogleTranslator();
            var zh         = Language.ChineseSimplified;
            var en         = Language.English;

            var lastError = false;

            var translate = Observable.FromEventPattern <object>(
                h => Clipboard.ContentChanged += h,
                h => Clipboard.ContentChanged -= h)
                            .Merge(
                Observable.Return <object>(null)
                .Where(_ => !lastError)
                .Do(_ => lastError = false)
                )
                            .SubscribeOnDispatcher()
                            .ObserveOn(TaskPoolScheduler.Default)
                            .Throttle(TimeSpan.FromMilliseconds(50))
                            .TakeUntil(status.Where(x => x == MainPageStatus.Pause))
                            .RepeatWhen(_ =>
                                        status.Where(_ => Status == MainPageStatus.Pause)
                                        .Where(x => x == MainPageStatus.Normal)
                                        .Do(_ => lastError = false)
                                        )
                            .Do(_ => status.OnNext(MainPageStatus.Busy))
                            .SelectMany(_ =>
                                        Observable.FromAsync(async() =>
            {
                var req = new ValueSet();
                req.Add("Op", "Clipboard");
                var res = await App.Connection?.SendMessageAsync(req);
                return((res.Message["Res"] as string).Trim());
            })
                                        .Catch(Observable.Return(string.Empty))
                                        )
                            .WhereAndElse(x => x != string.Empty && char.IsLetter(x[0]), _ => status.OnNext(MainPageStatus.Normal))
                            .DistinctUntilChangedAndElse(_ => status.OnNext(MainPageStatus.Normal))
                            .Select(x => x.Replace("\r\n", " "))
                            .Select(x => Observable.FromAsync(async() => await translator.TranslateLiteAsync(x, en, zh)))
                            .Switch()
                            .Select(x => x.MergedTranslation)
                            .Do(_ => status.OnNext(MainPageStatus.Normal))
            ;

            // workaround for use unassigned variable
            Action subTranslate = () => throw new NotImplementedException();

            subTranslate = () =>
            {
                translate.ObserveOnDispatcher()
                .ToPropertyEx(this, x => x.Translated)
                .ThrownExceptions
                .Subscribe(e =>
                {
                    status.OnNext(MainPageStatus.Failed);
                    Debug.WriteLine($"Exception: {e.Message}");
                    lastError = true;

                    subTranslate();
                });
            };

            this.WhenActivated(async(CompositeDisposable d) =>
            {
                if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
                {
                    Observable.FromEventPattern <AppServiceTriggerDetails>(
                        h => App.AppServiceConnected += h,
                        h => App.AppServiceConnected -= h)
                    .Subscribe(x =>
                    {
                        subTranslate();
                    });

                    Observable.FromEventPattern(
                        h => App.AppServiceDisconnected += h,
                        h => App.AppServiceDisconnected -= h)
                    .ObserveOnDispatcher()
                    .Subscribe(async x =>
                    {
                        var dlg = new MessageDialog("AppService has disconnected.");
                        await dlg.ShowAsync();
                    });

                    await LaunchFullTrustAsync();
                }
            });
        }
Example #25
0
        private static async void TranslateAsync(string line, long msgCount)
        {
            var translator = new GoogleTranslator();

            Language from = Language.Auto;
            Language to   = Language.Russian;

            MatchCollection matches = paramCatch.Matches(line);

            if (!int.TryParse(StringHelper.Replacer.Clean(matches[1].Value), out int parsedChatType))
            {
                parsedChatType = 0;
            }

            ChatType chatType = ChatType.LogColorYellow;

            bool knownMesType = true;

            if (Enum.IsDefined(typeof(ChatType), parsedChatType))
            {
                chatType = (ChatType)parsedChatType;
            }
            else
            {
                knownMesType = false;
            }

            IMessage msg = new IMessage(matches[0].Value,
                                        chatType,
                                        matches[2].Value,
                                        matches[3].Value);


            string newMessage = $"{msg.TimeStamp} [{msg.Sender}]: \"{msg.Text}\"";

            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine($"<< {newMessage}");
            Console.ResetColor();

            if (!knownMesType)
            {
                string unknownMesType = $"Finded unexpected type of message: {parsedChatType}";

                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"<< {unknownMesType}");
                Console.ResetColor();

                if (!File.Exists(ErrorLog))
                {
                    using (FileStream file = File.Create(ErrorLog))
                    {
                        // Create file if not exist
                    }
                }
                File.AppendAllText(ErrorLog, DateTime.Now + $" {unknownMesType}\n   \"{newMessage}\"\n\n");
            }


            bool success = false;
            int  retry   = 0;

            while (!success && retry < 3)
            {
                try
                {
                    if (!Debug)
                    {
                        if (!(msg.Text.Length <= 2))
                        {
                            TranslationResult result = await translator.TranslateLiteAsync(msg.Text, from, to).ConfigureAwait(true);

                            msg.Text = result.MergedTranslation;
                        }
                    }

                    success = true;
                }
                catch (Exception e)
                {
                    if (!File.Exists(ErrorLog))
                    {
                        using (FileStream file = File.Create(ErrorLog))
                        {
                            // Create file if not exist
                        }
                    }
                    File.AppendAllText(ErrorLog, DateTime.Now + $"{e.Message}\n" +
                                       $"{e.StackTrace}\n");
                    retry++;
                }
            }

            if (!success)
            {
                Console.WriteLine($"Could not translate message in {retry} attempts");
            }

            MessagesSender(msg, msgCount);
        }
Example #26
0
        public MainPageViewModel()
        {
            var status = new Subject <MainPageStatus>();

            status.ObserveOnDispatcher()
            .ToPropertyEx(this, x => x.Status);

            StatusTappedCommand = ReactiveCommand.Create <TappedRoutedEventArgs>(_ =>
            {
                status.OnNext(Status != MainPageStatus.Pause ? MainPageStatus.Pause : MainPageStatus.Normal);
            });

            var translator = new GoogleTranslator();
            var zh         = Language.ChineseSimplified;
            var en         = Language.English;

            var lastError = false;

            var translate = Observable.FromEventPattern <object>(
                h => Clipboard.ContentChanged += h,
                h => Clipboard.ContentChanged -= h)
                            .Merge(
                Observable.Return <object>(null)
                .Where(_ => !lastError)
                .Do(_ => lastError = false)
                )
                            .SubscribeOnDispatcher()
                            .ObserveOn(TaskPoolScheduler.Default)
                            .Throttle(TimeSpan.FromMilliseconds(50))
                            .TakeUntil(status.Where(x => x == MainPageStatus.Pause))
                            .RepeatWhen(_ =>
                                        status.Where(_ => Status == MainPageStatus.Pause)
                                        .Where(x => x == MainPageStatus.Normal)
                                        .Do(_ => lastError = false)
                                        )
                            .Do(_ => status.OnNext(MainPageStatus.Busy))
                            .SelectMany(_ =>
                                        Observable.FromAsync(async() =>
            {
                var req = new ValueSet();
                req.Add("Op", "Clipboard");
                var res = await App.Connection?.SendMessageAsync(req);
                return((res.Message["Res"] as string).Trim());
            })
                                        .Catch(Observable.Return(string.Empty))
                                        )
                            .WhereAndElse(x => x != string.Empty && char.IsLetter(x[0]), _ => status.OnNext(MainPageStatus.Normal))
                            .DistinctUntilChangedAndElse(_ => status.OnNext(MainPageStatus.Normal))
                            .Select(x => x.Replace("\r\n", " "))
                            .Select(x => Observable.FromAsync(async() => await translator.TranslateLiteAsync(x, en, zh)))
                            .Switch()
                            .Select(x => x.MergedTranslation)
                            .Do(_ => status.OnNext(MainPageStatus.Normal))
            ;

            SubTranslate = () =>
            {
                translate.ObserveOnDispatcher()
                .ToPropertyEx(this, x => x.Translated)
                .ThrownExceptions
                .Subscribe(e =>
                {
                    status.OnNext(MainPageStatus.Failed);
                    Debug.WriteLine($"Exception: {e.Message}");
                    lastError = true;

                    SubTranslate();
                });
            };
        }
Example #27
0
        private async void translateToEnglishToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var translator = new GoogleTranslator();

            Enabled = false;

            Language from = Language.German;
            //Language to = GoogleTranslator.GetLanguageByName("Japanese");
            Language to     = Language.English;
            int      tmpCnt = 0;

            foreach (var scriptMsg in listBox_ScriptMessages.Items)
            {
                _timerMessageApply.Enabled = false;
                ScriptMessage message = (ScriptMessage)scriptMsg;
                if (message == null)
                {
                    return;
                }
                //richTextBox_ScriptMessage.Text = message.Content;
                ///UpdatePreview(message);

                List <string> dialogs = new List <string>();
                foreach (var dialog in message.ContentTextArray)
                {
                    if (dialog != "" || dialog != string.Empty)
                    {
                        string cleanInput = dialog.Replace("\r", " ").Replace("\n", string.Empty);
                        //cleanInput = cleanInput.Substring(cleanInput.IndexOf(':') + 1);
                        TranslationResult result = await translator.TranslateLiteAsync(cleanInput, from, to);

                        dialogs.Add(result.MergedTranslation);
                    }
                }

                Regex           x                 = new Regex(@"(\%COL\([0-9]+\)\:([a-zA-Z]+)\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:))");
                Regex           y                 = new Regex(@"(\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:))");
                string          tmpContent        = message.Content;
                MatchCollection matches           = x.Matches(tmpContent);
                int             messageRegexGroup = 3;

                //try alterantive regex when no match
                if (matches.Count <= 0)
                {
                    matches           = y.Matches(tmpContent);
                    messageRegexGroup = 2;
                }

                int dialogCharLimitRow = 22;
                int actualRow          = 1;

                int matchIterator = 0;
                foreach (Match ItemMatch in matches)
                {
                    var           splitDialog   = dialogs[matchIterator].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    StringBuilder stringBuilder = new StringBuilder();

                    Console.WriteLine("NameLength: " + ItemMatch.Groups[2].Length);
                    dialogCharLimitRow -= ItemMatch.Groups[2].Length;

                    if (ItemMatch.Groups[2].Length % 2 != 1 && ItemMatch.Groups[2].Length != 0)
                    {
                        stringBuilder.Append(" ");
                        dialogCharLimitRow -= 1;
                    }

                    foreach (var word in splitDialog)
                    {
                        if (word.Length > 22)
                        {
                            MessageBox.Show("Validation failed! The word " + word + " is TOO LONG! Parsing stopped!", "Word is too long for the game engine!");
                            break;
                        }

                        if ((word.Length + 1) >= dialogCharLimitRow)
                        {
                            actualRow += 1;
                            if (actualRow >= 6)
                            {
                                //Optional TODO: Append the correct name!
                                //TODO: clear up this copypaste festival someday
                                stringBuilder.Append("%KW:%CLR:%COL(5):" + ItemMatch.Groups[2].Value + ":%COL(1):");
                                actualRow          = 1;
                                dialogCharLimitRow = 22 - ItemMatch.Groups[2].Length;

                                if (ItemMatch.Groups[2].Length % 2 != 1 && ItemMatch.Groups[2].Length != 0)
                                {
                                    stringBuilder.Append(" ");
                                    dialogCharLimitRow -= 1;
                                }
                            }

                            stringBuilder.Append("%LF:"); //NEW LINE
                            stringBuilder.Append(word);
                            stringBuilder.Append(" ");
                            dialogCharLimitRow = 22 - (word.Length + 1);
                        }
                        else
                        {
                            stringBuilder.Append(word);              //write out word
                            stringBuilder.Append(" ");
                            dialogCharLimitRow -= (word.Length + 1); // minus empty space
                        }
                    }

                    tmpContent = tmpContent.Replace(ItemMatch.Groups[messageRegexGroup].Value, stringBuilder.ToString());
                    stringBuilder.Clear();
                    actualRow = 1;
                    matchIterator++;
                }

                //(\%COL\([0-9]+\)\:([a-zA-Z]+)\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:))
                //match count is 0..x
                // group2 = Message name (for length parser), group 3: complette text string until kill window command

                //if no match use
                //(\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:))
                //match count is 0..x
                // group2 = complette text string until kill window command
                // regex for messages without name in it

                //if no match then skip message but make at least a console.log

                //message.ContentAlternative = tmpContent;
                message.ContentAlternative = message.Content; //backup old translation for preview purposes
                message.Content            = tmpContent;

                //if (tmpCnt >= 16) //debug limit because google api will lock me out when i make too many requests
                //{
                //    Enabled = true;
                //    break;
                //}
                tmpCnt++;

                Invoke((MethodInvoker) delegate
                {
                    progressBar_Progress.Value = (int)((double)tmpCnt / listBox_ScriptMessages.Items.Count * 100);
                });
            }
            MessageBox.Show("Selected chapter was translated!", "API Translation");

            Invoke((MethodInvoker) delegate
            {
                progressBar_Progress.Value = 0;
                Enabled = true;
            });
        }
        public async void RunServerThreadAsync(Socket client)
        {
#if !DEBUG
            try
#endif
            {
                String originalRequest = Recieve(client); //헤더 가져오기
                if (originalRequest != "")
                {
                    foreach (String headers in GetHeaders(originalRequest))
                    {
                        WriteConsole(headers, ConsoleColor.DarkGray);
                    }
                    if (originalRequest.Contains("nmsg") && originalRequest.Contains("api.json/")) // 일반적인 경우
                    {
                        if (translator == (int)Translators.None)
                        {
                            SendOriginalServer(client, "api.json/", originalRequest);
                        }
                        else
                        {
                            var http = (HttpWebRequest)WebRequest.Create(new Uri("http://202.248.252.234/api.json/"));
                            foreach (string header in GetHeaders(originalRequest))
                            {
                                if (header.Contains("Host:"))
                                {
                                    http.Host = GetHeaderValue(header);
                                }
                                else if (header.Contains("User-Agent:"))
                                {
                                    http.UserAgent = GetHeaderValue(header);
                                }
                                else if (header.Contains("Content-Type:"))
                                {
                                    http.UserAgent = GetHeaderValue(header);
                                }
                                else if (header.Contains("Accept:"))
                                {
                                    http.Accept = GetHeaderValue(header);
                                }
                                else if (header.Contains("Referer:"))
                                {
                                    http.Referer = GetHeaderValue(header);
                                }
                                else
                                {
                                    http.Headers.Add(header);
                                }
                            }
                            http.Method = "POST";
                            string parsedContent = GetPayloads(originalRequest);
                            if (parsedContent != "")
                            {
                                UTF8Encoding encoding = new UTF8Encoding();
                                Byte[]       bytes    = encoding.GetBytes(parsedContent);

                                Stream newStream = http.GetRequestStream();
                                newStream.Write(bytes, 0, bytes.Length);
                                newStream.Close();

                                var    response         = http.GetResponse();
                                string responseOriginal = Encoding.UTF8.GetString(response.Headers.ToByteArray());
                                var    stream           = response.GetResponseStream();
                                var    sr      = new StreamReader(stream);
                                string content = sr.ReadToEnd();
                                response.Close();
                                JArray        jArray      = JArray.Parse(content);
                                List <JToken> jTokens     = new List <JToken>();
                                List <string> splited     = new List <string>();
                                var           jTokensList = new List <List <JToken> >();
                                int           c           = 0;
                                int           d           = 0;
                                int           cb          = 0;
                                foreach (var item in jArray)
                                {
                                    if (item["chat"] != null && item["chat"]["content"] != null)
                                    {
                                        jTokens.Add(item);
                                    }
                                }
                                if (jTokens.Count != 0)
                                {
                                    while (true)
                                    {
                                        d  = 0;
                                        cb = c;
                                        for (int i = 0; i < 5000 && c < jTokens.Count; c++, d++)
                                        {
                                            i += (jTokens[c]["chat"]["content"] + Environment.NewLine).Length;
                                        }
                                        if (c == jTokens.Count)
                                        {
                                            jTokensList.Add(jTokens.GetRange(cb, d));
                                            break;
                                        }
                                        else
                                        {
                                            jTokensList.Add(jTokens.GetRange(cb, d - 1));
                                            c--;
                                        }
                                    }
                                    foreach (List <JToken> list in jTokensList)
                                    {
                                        string s = "";
                                        foreach (JToken item in list)
                                        {
                                            s += (item["chat"]["content"] + Environment.NewLine);
                                        }
                                        splited.Add(s);
                                    }
                                    c = 0;//재활용
                                    for (int i = 0; i < splited.Count; i++)
                                    {
                                        if (i != 0)
                                        {
                                            Thread.Sleep(5000);
                                        }
                                        string[] lines = null;
                                        if (translator == (int)Translators.Google)
                                        {
                                            TranslationResult result = await googleTranslator.TranslateLiteAsync(splited[i], from, to);

                                            lines = result.MergedTranslation.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
                                        }
                                        if (translator == (int)Translators.Papago)
                                        {
                                            splited[i] = splited[i].Replace(Environment.NewLine, "\n");
                                            string result = papagoTranslate.Translate("ja", "ko", splited[i], "nsmt");
                                            lines = result.Split(new string[] { "\n" }, StringSplitOptions.None);
                                        }


                                        for (int j = 0; j < lines.Length; j++)
                                        {
                                            jTokens[c++]["chat"]["content"] = lines[j];
                                        }
                                        Console.WriteLine("{0} / {1} 완료", c, jTokens.Count);
                                    }
                                }
                                client.Send(GetSendByte(client, jArray.ToString(), responseOriginal, (int)((HttpWebResponse)response).StatusCode)); //클라이언트에 HTML 등 전송
                            }
                        }
                    }
                    else if (originalRequest.Contains("www.nicovideo.jp"))
                    {
                        var http = (HttpWebRequest)WebRequest.Create(new Uri("http://202.248.110.184" + originalRequest.Split(' ')[1].Split('\r')[0]));
                        foreach (string header in GetHeaders(originalRequest))
                        {
                            if (header.Contains("Host:"))
                            {
                                http.Host = GetHeaderValue(header);
                            }
                            else if (header.Contains("User-Agent:"))
                            {
                                http.UserAgent = GetHeaderValue(header);
                            }
                            else if (header.Contains("Content-Type:"))
                            {
                                http.UserAgent = GetHeaderValue(header);
                            }
                            else if (header.Contains("Accept:"))
                            {
                                http.Accept = GetHeaderValue(header);
                            }
                            else if (header.Contains("Referer:"))
                            {
                                http.Referer = GetHeaderValue(header);
                            }
                            else
                            {
                                http.Headers.Add(header);
                            }
                        }
                        http.Method = originalRequest.Contains("POST") ? "POST" : "GET";
                        string parsedContent = GetPayloads(originalRequest);
                        if (parsedContent != "")
                        {
                            UTF8Encoding encoding = new UTF8Encoding();
                            Byte[]       bytes    = encoding.GetBytes(parsedContent);

                            Stream newStream = http.GetRequestStream();
                            newStream.Write(bytes, 0, bytes.Length);
                            newStream.Close();
                        }
                        var    response         = http.GetResponse();
                        string responseOriginal = Encoding.UTF8.GetString(response.Headers.ToByteArray());
                        var    stream           = response.GetResponseStream();
                        var    sr      = new StreamReader(stream, Encoding.UTF8);
                        string content = sr.ReadToEnd();
                        response.Close();
                        content = content.Replace("https:\\/\\/nmsg.nicovideo.jp", "http:\\/\\/nmsg.nicovideo.jp");
                        client.Send(GetSendByte(client, content, responseOriginal, (int)((HttpWebResponse)response).StatusCode)); //클라이언트에 HTML 등 전송
                    }
                    else
                    {
                        SendOriginalServer(client, originalRequest.Split('/')[1].Split(' ')[0], originalRequest);
                    }
                }

                WriteConsole("접속해제 :" + ((IPEndPoint)client.RemoteEndPoint).Address + ":" + ((IPEndPoint)client.RemoteEndPoint).Port, ConsoleColor.Green);
                client.Close();
            }
#if !DEBUG
            catch (Exception ex)
            {
                WriteConsole("클라이언트와의 연결에서 오류가 발생했습니다. 자세한 오류는 아래를 참고해주시기 바랍니다.", ConsoleColor.Red);
                WriteConsole(ex.ToString(), ConsoleColor.Red);
                client.Close();
            }
#endif
        }