コード例 #1
0
        private Botje.Messaging.Models.User GetTgUserForLoggedInUser(Botje.DB.IDatabase db, ref Team team, ref int level)
        {
            Botje.DB.DbSet <UserSettings> dbSetUserSettings = db.GetCollection <UserSettings>();
            var userSetting = dbSetUserSettings.Find(x => x.User.ID == LoggedInUser.TelegramUserID).FirstOrDefault();

            if (null != userSetting)
            {
                team  = userSetting.Team;
                level = userSetting.Level;
            }

            SplitDisplayName(LoggedInUser.DisplayName, out string firstName, out string lastName);

            var tgUser = new Botje.Messaging.Models.User
            {
                ID           = LoggedInUser.TelegramUserID,
                FirstName    = firstName,
                LastName     = lastName,
                Username     = LoggedInUser.UserName,
                IsBot        = false,
                LanguageCode = "nl-NL",
            };

            return(tgUser);
        }
コード例 #2
0
        public async Task <IActionResult> Join([FromQuery] string id, [FromQuery] string when, [FromQuery] int extra)
        {
            if (!_botHost.IsRunning)
            {
                return(JsonError(System.Net.HttpStatusCode.BadRequest, "Not started", "Not started"));
            }

            if (LoggedInUser == null || LoggedInUser.TelegramUserID == 0)
            {
                return(JsonError(System.Net.HttpStatusCode.BadRequest, "Registreer eerst bij de bot", "Registreer eerst bij de bot"));
            }

            var db     = _botHost.Kernel.Get <Botje.DB.IDatabase>();
            var logger = _botHost.Kernel.Get <Botje.Core.ILoggerFactory>().Create(typeof(RaidsController));
            var raidParticipationCollection = db.GetCollection <RaidParticipation>();

            var raid = raidParticipationCollection.Find(x => x.PublicID == id).SingleOrDefault();

            if (null == raid)
            {
                return(JsonError(System.Net.HttpStatusCode.BadRequest, "Invalid ID", "Invalid ID"));
            }

            Team team  = Team.Unknown;
            int  level = -1;

            Botje.Messaging.Models.User user = GetTgUserForLoggedInUser(db, ref team, ref level);

            RemoveAnyAndAllCurrentParticipations(raid, user);

            var participation = new UserParticipation {
                User = user
            };

            participation.Extra = extra;

            if (DateTime.TryParse(when ?? "", out DateTime whenAsDateTime))
            {
                participation.UtcWhen = whenAsDateTime.ToUniversalTime();
            }

            if (!raid.Participants[team].Contains(participation))
            {
                raid.Participants[team].Add(participation);
                raid.Participants[team].Sort((x, y) => string.Compare(x.User.DisplayName(), y.User.DisplayName()));
            }

            raid.LastModificationTime = DateTime.UtcNow;

            raidParticipationCollection.Update(raid);

            logger.Info($"Got subscription for raid {raid.Raid.Raid} ({id}) at {raid.Raid.Gym} for {user.UsernameOrName()} (level: {level}, team: {team}) @ {when}, with {extra} extra players");

            var result = raid.Adapt <McRaidDetails>();

            return(new JsonResult(await Task.FromResult(result), JsonSettings));
        }
コード例 #3
0
        public async Task <IActionResult> No([FromQuery] string id)
        {
            if (!_botHost.IsRunning)
            {
                return(JsonError(System.Net.HttpStatusCode.BadRequest, "Not started", "Not started"));
            }

            if (LoggedInUser == null || LoggedInUser.TelegramUserID == 0)
            {
                return(JsonError(System.Net.HttpStatusCode.BadRequest, "Registreer eerst bij de bot", "Registreer eerst bij de bot"));
            }

            var db     = _botHost.Kernel.Get <Botje.DB.IDatabase>();
            var logger = _botHost.Kernel.Get <Botje.Core.ILoggerFactory>().Create(typeof(RaidsController));
            var raidParticipationCollection = db.GetCollection <RaidParticipation>();

            var raid = raidParticipationCollection.Find(x => x.PublicID == id).SingleOrDefault();

            if (null == raid)
            {
                return(JsonError(System.Net.HttpStatusCode.BadRequest, "Invalid ID", "Invalid ID"));
            }

            Team team  = Team.Unknown;
            int  level = -1;

            Botje.Messaging.Models.User user = GetTgUserForLoggedInUser(db, ref team, ref level);

            RemoveAnyAndAllCurrentParticipations(raid, user);

            raid.Rejected.Add(user);

            raid.LastModificationTime = DateTime.UtcNow;

            raidParticipationCollection.Update(raid);

            logger.Info($"Got no for raid {raid.Raid.Raid} ({id}) at {raid.Raid.Gym} for {user.UsernameOrName()} (level: {level}, team: {team})");

            var result = raid.Adapt <McRaidDetails>();

            return(new JsonResult(await Task.FromResult(result), JsonSettings));
        }
コード例 #4
0
 private static void RemoveAnyAndAllCurrentParticipations(RaidParticipation raid, Botje.Messaging.Models.User user)
 {
     foreach (Team t in Enum.GetValues(typeof(Team)).OfType <Team>())
     {
         if (raid.Participants.ContainsKey(t) && null != raid.Participants[t])
         {
             raid.Participants[t].RemoveAll(x => x.User?.ID == user.ID);
         }
     }
     raid.Rejected.RemoveAll(x => x.ID == user.ID);
     raid.Done.RemoveAll(x => x.ID == user.ID);
     raid.Maybe.RemoveAll(x => x.ID == user.ID);
 }