Beispiel #1
0
        private async Task ResetReactionsIfNecessary(Workshop currentWorkshop, Emoji thumbsUpEmote, Workshop dbWorkshop, IUserMessage message)
        {
            if (dbWorkshop == null)
            {
                return;
            }

            if (!WorkshopHelpers.TimeHasChanged(dbWorkshop, currentWorkshop))
            {
                return;
            }

            var hadOneUser = false;

            var reactedUsers = message.GetReactionUsersAsync(thumbsUpEmote, 1000)
                               .SelectMany(x => x.ToAsyncEnumerable())
                               .Where(x => !x.IsBot && x.Id != _discordClient.CurrentUser.Id);

            await foreach (var reactedUser in reactedUsers)
            {
                hadOneUser = true;
                // Notify user that time has changed
                var affectedTimes = new string[]
                {
                    !WorkshopHelpers.BeginTimeChanged(dbWorkshop, currentWorkshop) ? string.Empty : "Startzeit",
                    !WorkshopHelpers.EndTimeChanged(dbWorkshop, currentWorkshop) ? string.Empty : "Endzeit"
                }.Where(x => !string.IsNullOrEmpty(x));

                var affectedTimeString = string.Join(" und ", affectedTimes);
                try
                {
                    await reactedUser.SendMessageAsync
                    (
                        $"Die {affectedTimeString} vom Workshop **{currentWorkshop.title}** wurde geändert. \n" +
                        $"Er beginnt um **{currentWorkshop.begintime}** und endet um {currentWorkshop.endtime}.:alarm_clock:\n" +
                        $"Deshalb wurde deine Benachrichtigung deaktiviert. Bitte reagiere erneut mit \U0001F44D auf die Nachricht am Server, damit du rechtzeitig erinnert wirst!"
                    );
                }
                catch (Exception)
                {
                    //Ignore
                }
            }

            if (hadOneUser)
            {
                await message.RemoveAllReactionsAsync();

                await message.AddReactionAsync(thumbsUpEmote);
            }
        }