예제 #1
0
        public async Task SetUserAfk(ulong userId, string message)
        => await _soraTransactor.DoInTransactionAsync(async context =>
        {
            var user = await context.Users.GetOrCreateUserNoSaveAsync(userId).ConfigureAwait(false);
            if (user.Afk == null)
            {
                var afk = new Afk()
                {
                    UserId  = userId,
                    Message = message
                };
                user.Afk = afk;
            }
            else
            {
                user.Afk.Message = message;
            }

            await context.SaveChangesAsync().ConfigureAwait(false);
        }).ConfigureAwait(false);
예제 #2
0
            public async Task Away([Summary("Time and/or Reason")][Remainder] string reason = null)
            {
                using (var db = new NeoContext()) {
                    if (db.Afks.Any(afk => afk.User == db.Users.FirstOrDefault(u => u.Id == Context.User.Id))) //user is afk so he is back now
                    {
                        var obj = db.Afks.FirstOrDefault(afk => afk.User == db.Users.FirstOrDefault(u => u.Id == Context.User.Id));
                        if (string.IsNullOrEmpty(obj?.Reason))
                        {
                            var embed = NeoEmbeds.Afk($"{Context.User} is back!", Context.User);
                            await ReplyAsync("", false, embed.Build());
                        }
                        else
                        {
                            var embed = NeoEmbeds.Afk($"{Context.User} is back from {obj.Reason.TrimStart()}!", Context.User);
                            await ReplyAsync("", false, embed.Build());
                        }
                        db.Afks.Attach(obj ?? throw new InvalidOperationException());
                        db.Afks.Remove(obj);
                        db.SaveChanges();
                    }
                    else
                    {
                        var obj = new Afk();
                        if (reason != null)                                                                                  // there is time and or reason
                        {
                            var time = reason.Substring(0, reason.IndexOf(' ') <= -1 ? reason.Length : reason.IndexOf(' ')); // get first block
                            if (CheckTimeString(time))                                                                       //check if first block is time string
                            {
                                var timestr = HandleTime(time);                                                              //get timespan from that block
                                reason = reason.Replace(time, "");                                                           //get time out of reason
                                if (reason.Length == 0)
                                {
                                    var embed = NeoEmbeds.Afk($"{Context.User} is now afk!", Context.User, null, Thing(timestr));
                                    await ReplyAsync("", false, embed.Build());

                                    obj.Reason = null;
                                    obj.Time   = (DateTime.Now + timestr);
                                    obj.User   = db.Users.FirstOrDefault(u => u.Id == Context.User.Id);
                                }
                                else
                                {
                                    var embed = NeoEmbeds.Afk($"{Context.User} is now afk!", Context.User, reason, Thing(timestr));
                                    await ReplyAsync("", false, embed.Build());

                                    obj.Reason = reason;
                                    obj.Time   = (DateTime.Now + timestr);
                                    obj.User   = db.Users.FirstOrDefault(u => u.Id == Context.User.Id);
                                }
                            }
                            else  //no time just reason
                            {
                                var embed = NeoEmbeds.Afk($"{Context.User} is now afk!", Context.User, reason);
                                await ReplyAsync("", false, embed.Build());

                                obj.Reason = reason;
                                obj.Time   = default(DateTime);
                                obj.User   = db.Users.FirstOrDefault(u => u.Id == Context.User.Id);
                            }
                        }
                        else  //no reason and time
                        {
                            var embed = NeoEmbeds.Afk($"{Context.User} is now afk!", Context.User);
                            await ReplyAsync("", false, embed.Build());

                            obj.Reason = null;
                            obj.Time   = default(DateTime);
                            obj.User   = db.Users.FirstOrDefault(u => u.Id == Context.User.Id);
                        }
                        db.Afks.Add(obj);
                        db.SaveChanges();
                    }
                }
            }