Ejemplo n.º 1
0
        public async Task OnReactionAdd(Cacheable <IUserMessage, ulong> cmessage, ISocketMessageChannel ichannel, SocketReaction reaction)
        {
            if (!(reaction.Emote is Emoji emoji) || emoji.Name != "📳" || !(ichannel is SocketGuildChannel channel))
            {
                return;
            }

            var run = _db.Events.FirstOrDefault(e => e.MessageId3 == cmessage.Id);

            if (run == null || run.Notified || run.RunTime < DateTime.Now.ToBinary() || run.SubscribedUsers.Contains(reaction.UserId.ToString()) || reaction.UserId == run.LeaderId || reaction.UserId == _client.CurrentUser.Id)
            {
                return;
            }

            await _db.AddMemberToEvent(run, reaction.UserId);

            var leader = channel.GetUser(run.LeaderId);
            var member = _client.GetUser(reaction.UserId);

            var runTime = DateTime.FromBinary(run.RunTime);

            var dbUser = _db.Users.FirstOrDefault(u => u.DiscordId == member.Id);
            // ReSharper disable once JoinDeclarationAndInitializer
            TimeZoneInfo tzi;

            var(customTzi, localizedRunTime) = Util.GetLocalizedTimeForUser(dbUser, runTime);
            tzi = customTzi ?? TimeZoneInfo.FindSystemTimeZoneById("America/Los_Angeles");
            if (localizedRunTime != default)
            {
                runTime = localizedRunTime;
                runTime = runTime.AddHours(8);
            }

            var tzAbbrs = TZNames.GetAbbreviationsForTimeZone(tzi.Id, "en-US");
            var tzAbbr  = tzi.IsDaylightSavingTime(DateTime.Now) ? tzAbbrs.Daylight : tzAbbrs.Standard;

            await member.SendMessageAsync($"You have RSVP'd for {leader.Nickname ?? leader.Username}'s run on on {runTime.DayOfWeek} at {runTime.ToShortTimeString()} ({tzAbbr}) [{runTime.DayOfWeek}, {(Month)runTime.Month} {runTime.Day}]! :thumbsup:");

            Log.Information("Added member {MemberId} to run {MessageId}.", reaction.UserId, run.MessageId3);
        }