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); }