Exemple #1
0
        public async Task HandleReaction(SocketReaction reaction, IGuildUser user, ulong guildId, string raidId)
        {
            if (!Raids.ContainsKey(raidId))
            {
                return;
            }

            Raid         raid        = Raids[raidId];
            IUserMessage userMessage = (IUserMessage)await reaction.Channel.GetMessageAsync(raid.MessageId);

            IEmote emote = reaction.Emote;

            if (emote.Equals(Constants.SignOffEmoji))
            {
                RemoveUser(raid.RaidId, user.Id);
                SaveRaids();
                await userMessage.ModifyAsync(msg => msg.Embed = raid.CreateRaidMessage());

                await userMessage.RemoveReactionAsync(reaction.Emote, user);

                return;
            }

            ulong userId = user.Id;

            if (_userService.GetAccounts(guildId, userId, raid.AccountType).Count == 0)
            {
                await UserExtensions.SendMessageAsync(user, $"No Account found, please add an Account with \"!user add {raid.AccountType} <AccountName>\".\n" +
                                                      "\n**This command only works on a server.**");

                return;
            }

            if (emote.Equals(Constants.FlexEmoji))
            {
                if (!_conversationService.UserHasConversation(user.Id))
                {
                    _conversationService.OpenSignUpConversation(this, reaction, user, raid, Constants.Availability.Flex);
                }
            }
            else if (raid.Users.ContainsKey(userId))
            {
                if (emote.Equals(Constants.SignOnEmoji))
                {
                    if (raid.IsAvailabilityChangeAllowed(userId, Constants.Availability.Yes))
                    {
                        raid.Users[userId].Availability = Constants.Availability.Yes;
                    }
                }
                else if (emote.Equals(Constants.UnsureEmoji))
                {
                    raid.Users[userId].Availability = Constants.Availability.Maybe;
                }
                else if (emote.Equals(Constants.BackupEmoji))
                {
                    raid.Users[userId].Availability = Constants.Availability.Backup;
                }
            }
            else if (!_conversationService.UserHasConversation(user.Id))
            {
                if (emote.Equals(Constants.SignOnEmoji))
                {
                    _conversationService.OpenSignUpConversation(this, reaction, user, raid, Constants.Availability.Yes);
                }
                else if (emote.Equals(Constants.UnsureEmoji))
                {
                    _conversationService.OpenSignUpConversation(this, reaction, user, raid, Constants.Availability.Maybe);
                }
                else if (emote.Equals(Constants.BackupEmoji))
                {
                    _conversationService.OpenSignUpConversation(this, reaction, user, raid, Constants.Availability.Backup);
                }
            }
            SaveRaids();
            await userMessage.ModifyAsync(msg => msg.Embed = raid.CreateRaidMessage());

            await userMessage.RemoveReactionAsync(reaction.Emote, user);
        }