public static async Task RemoveDisciplinaryEventAsync(ulong userID, DisciplinaryEventEnum type)
        {
            try
            {
                using (var db = new UserContext())
                {
                    //check event table first
                    UserDisciplinaryEventStorage[] existingEvents;

                    if (type == DisciplinaryEventEnum.BanEvent)
                    {
                        existingEvents = await db.UserDisciplinaryEventStorageTable.AsQueryable().Where(x => x.UserID == userID).ToArrayAsync();
                    }
                    else
                    {
                        existingEvents = await db.UserDisciplinaryEventStorageTable.AsQueryable().Where(x => x.UserID == userID &&
                                                                                                        x.DiscipinaryEventType == type).ToArrayAsync();
                    }

                    if (existingEvents.Count() > 0)
                    {
                        foreach (var item in existingEvents)
                        {
                            await TimedEventManager.RemoveEvent(item.DisciplineEventID);

                            db.UserDisciplinaryEventStorageTable.Remove(item);
                            var archivedEvent = new UserDisciplinaryEventArchive()
                            {
                                DateArchived      = DateTime.UtcNow,
                                DateInserted      = item.DateInserted,
                                DateToRemove      = item.DateToRemove,
                                DisciplineEventID = item.DisciplineEventID,
                                DisciplineType    = item.DiscipinaryEventType,
                                ModeratorID       = item.ModeratorID,
                                Reason            = item.Reason,
                                UserID            = item.UserID
                            };
                            await db.UserDisciplinaryEventArchiveTable.AddAsync(archivedEvent);
                        }
                    }
                    else //check permanent event table if can't find
                    {
                        UserDisciplinaryPermanentStorage[] existingPermaEvents;

                        if (type == DisciplinaryEventEnum.BanEvent)
                        {
                            existingPermaEvents = await db.UserDisciplinaryPermanentStorageTable.AsQueryable().Where(x => x.UserID == userID).ToArrayAsync();
                        }
                        else
                        {
                            existingPermaEvents = await db.UserDisciplinaryPermanentStorageTable.AsQueryable().Where(x => x.UserID == userID &&
                                                                                                                     x.DiscipinaryEventType == type).ToArrayAsync();
                        }

                        if (existingPermaEvents.Count() > 0)
                        {
                            foreach (var item in existingPermaEvents)
                            {
                                await TimedEventManager.RemoveEvent(item.DisciplineEventID);

                                db.UserDisciplinaryPermanentStorageTable.Remove(item);
                                var archivedEvent = new UserDisciplinaryEventArchive()
                                {
                                    DateArchived      = DateTime.UtcNow,
                                    DateInserted      = item.DateInserted,
                                    DisciplineEventID = item.DisciplineEventID,
                                    DisciplineType    = item.DiscipinaryEventType,
                                    ModeratorID       = item.ModeratorID,
                                    Reason            = item.Reason,
                                    UserID            = item.UserID
                                };
                                await db.UserDisciplinaryEventArchiveTable.AddAsync(archivedEvent);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException($"{typeof(StorageManager).GetType().FullName}: {ExceptionManager.GetAsyncMethodName()}", ex);
                throw ex;
            }
        }