private static void Main(string[] args) { var settings = JObject.Parse(File.ReadAllText("appsettings.json")); var hostLog = settings["hostLog"].ToObject <HostLogConfiguration>(); var graphiteServiceName = settings["graphiteServiceName"].Value <string>(); LoggerSetup.Setup(hostLog, graphiteServiceName); try { var staff = new StaffClient(settings["staff"]["clientAuth"].Value <string>()); if (args.Contains("-r")) { Console.WriteLine("Username (example: KONTUR\\pe):"); var username = Console.ReadLine(); Console.WriteLine($"Password for {username}:"); var password = GetConsolePassword(); var refreshToken = staff.GetRefreshToken(username, password); Console.WriteLine($"RefreshToken: {refreshToken}"); return; } var telegramBot = new GiftsTelegramBot(); try { staff.UseRefreshToken(settings["staff"]["refreshToken"].Value <string>()); var maxGiftsPerRun = args.Length > 0 ? int.Parse(args[0]) : settings["maxGiftsPerRun"].Value <int>(); log.Info("UseGiftGrantsLimitPerRun\t" + maxGiftsPerRun); var db = new ULearnDb(); var repo = new VisitsRepo(db); var courses = settings["courses"].Values <string>(); var program = new Program(repo, staff, maxGiftsPerRun, settings, telegramBot); foreach (var courseId in courses) { program.GrantGiftsForCourse(courseId); } } catch (Exception e) { telegramBot.PostToChannel($"Error while grant staff gifts.\n\n{e}"); log.Error(e, "UnhandledException"); } } finally { FileLog.FlushAll(); } }
private bool GrantGiftsIfNone(RatingEntry entry, CourseSettings courseSettings, string courseId) { string sid = entry.User.Logins.First(login => login.LoginProvider == "Контур.Паспорт").ProviderKey; var staffUserId = staffClient.GetUser(sid)["id"].Value <int>(); var gifts = staffClient.GetUserGifts(staffUserId); var giftImagePath = courseSettings.giftImagePath; bool hasComplexityGift = gifts["entries"].Children().Any(gift => gift["giftImagePath"].Value <string>() == giftImagePath); if (!hasComplexityGift) { log.Info($"NoGiftYet\t{entry.Score}\t{entry.User.VisibleName}"); staffClient.GrantGift(staffUserId, entry.Score, courseSettings); log.Info($"ComplexityGiftGrantedFor\t{entry.User.VisibleName}\t{entry.User.KonturLogin}"); telegramBot.PostToChannel($"Granted gift for course {courseId}\n{entry.Score} points for user {entry.User.VisibleName} {entry.User.KonturLogin}"); return(true); } return(false); }