public static void SetLang(Update update, string[] args) { Player p = null; using (var db = new WWContext()) { p = db.Players.FirstOrDefault(x => x.TelegramId == update.Message.From.Id); if (p == null) { p = new Player { TelegramId = update.Message.From.Id, Language = "English", #if RELEASE HasPM = update.Message.Chat.Type == ChatType.Private #elif RELEASE2 HasPM2 = update.Message.Chat.Type == ChatType.Private #elif DEBUG HasDebugPM = update.Message.Chat.Type == ChatType.Private #endif }; db.Players.Add(p); p.UserName = update.Message.From.Username; p.Name = $"{update.Message.From.FirstName} {update.Message.From.LastName}".Trim(); db.SaveChanges(); //user obvious has no PM status, notify them #if RELEASE if (p.HasPM != true) #elif RELEASE2 if (p.HasPM2 != true) #elif DEBUG if (p.HasDebugPM != true) #endif { RequestPM(update.Message.Chat.Id); return; } } } //user wants to pick personal language var langs = LanguageHelper.GetAllLanguages(); // Directory.GetFiles(Bot.LanguageDirectory, "*.xml").Select(x => new LangFile(x)).ToList(); List <InlineKeyboardCallbackButton> buttons = langs.Select(x => x.Base).Distinct().OrderBy(x => x).Select(x => new InlineKeyboardCallbackButton(x, $"setlang|{update.Message.From.Id}|{x}|null|base")).ToList(); var baseMenu = new List <InlineKeyboardButton[]>(); for (var i = 0; i < buttons.Count; i++) { if (buttons.Count - 1 == i) { baseMenu.Add(new[] { buttons[i] }); } else { baseMenu.Add(new[] { buttons[i], buttons[i + 1] }); } i++; } var menu = new InlineKeyboardMarkup(baseMenu.ToArray()); var curLangFileName = GetLanguage(update.Message.From.Id); var curLang = langs.First(x => x.FileName == curLangFileName); Bot.Api.SendTextMessageAsync(update.Message.From.Id, GetLocaleString("WhatLang", curLangFileName, curLang.Base), replyMarkup: menu); if (update.Message.Chat.Type != ChatType.Private) { Send(GetLocaleString("SentPrivate", GetLanguage(update.Message.From.Id)), update.Message.Chat.Id); } }