Example #1
0
        private async void AddUser()
        {
            if (_raidService.AddUser(_raid.RaidId, _user, _role, _availability, _usedAccount, out string resultMessage))
            {
                try
                {
                    await UserExtensions.SendMessageAsync(_user, resultMessage);

                    IUserMessage userMessage = (IUserMessage)await _channel.GetMessageAsync(_raid.MessageId);

                    await userMessage.ModifyAsync(msg => msg.Embed = _raid.CreateRaidMessage());

                    await _logService.LogRaid($"{_raid.Users[_user.Id].Nickname} signed up as {_availability}", _raid);
                }
                catch { }
                finally
                {
                    _conversationService.CloseConversation(_user.Id);
                }
            }
            else
            {
                resultMessage += $"\n\n{CreateSignUpMessage(_raid)}";
                await UserExtensions.SendMessageAsync(_user, resultMessage);
            }
        }
Example #2
0
        protected override async Task ProcessUncanceledMessage(string message)
        {
            switch (_edit)
            {
            case Edits.Description:
                _raid.Description = message;
                break;

            case Edits.Duation:
                if (!await EditDuration(message))
                {
                    return;
                }
                break;

            case Edits.Time:
                if (!await EditTime(message))
                {
                    return;
                }
                break;

            case Edits.Title:
                _raid.Title = message;
                break;

            case Edits.Organisator:
                _raid.Organisator = message;
                break;

            case Edits.Guild:
                _raid.Guild = message;
                break;

            case Edits.VoiceChat:
                _raid.VoiceChat = message;
                break;
            }
            try
            {
                await _userMessage.ModifyAsync(msg => msg.Embed = _raid.CreateRaidMessage());

                await UserExtensions.SendMessageAsync(_user, "Successfully modified the raid.");
            }
            catch { }
            finally
            {
                _conversationService.CloseConversation(_user.Id);
                _raidService.UpdateRaid(_raid.RaidId, _raid);
            }
        }
Example #3
0
        private async Task ProcessDescriptionAsync(string message)
        {
            _raid.Roles.Find(r => r.Name == _role).Description = message;
            try
            {
                await _userMessage.ModifyAsync(msg => msg.Embed = _raid.CreateRaidMessage());

                await UserExtensions.SendMessageAsync(_user, "Successfully modified the raid.");
            }
            catch { }
            finally
            {
                _conversationService.CloseConversation(_user.Id);
                _raidService.UpdateRaid(_raid.RaidId, _raid);
            }
        }
Example #4
0
        public async Task <ulong> PostRaidMessageAsync(ITextChannel channel, Raid raid)
        {
            if (channel != null)
            {
                var raidMessage = await channel.SendMessageAsync(embed : raid.CreateRaidMessage());

                await raidMessage.AddReactionAsync(Constants.SignOnEmoji);

                await raidMessage.AddReactionAsync(Constants.UnsureEmoji);

                await raidMessage.AddReactionAsync(Constants.BackupEmoji);

                await raidMessage.AddReactionAsync(Constants.FlexEmoji);

                await raidMessage.AddReactionAsync(Constants.SignOffEmoji);

                return(raidMessage.Id);
            }
            else
            {
                throw new ArgumentNullException();
            }
        }
Example #5
0
        protected override async Task ProcessUncanceledMessage(string message)
        {
            switch (_state)
            {
            case State.creation:
                if (await CreateRaid(message))
                {
                    string       previewMessage = $"Raid preview: react with {Constants.SignOnEmoji} to create the raid or with {Constants.SignOffEmoji} to cancel.";
                    IUserMessage raidMessage    = await UserExtensions.SendMessageAsync(_user, previewMessage, embed : _raid.CreateRaidMessage());

                    await raidMessage.AddReactionAsync(Constants.SignOnEmoji);

                    await raidMessage.AddReactionAsync(Constants.SignOffEmoji);

                    _state = State.acception;
                }
                else
                {
                    await UserExtensions.SendMessageAsync(_user, $"Creation of the raid failed.");

                    _conversationService.CloseConversation(_user.Id);
                }
                break;

            case State.acception:
                if (message.Equals(Constants.SignOnEmoji.Name))
                {
                    ulong raidId = await _raidService.PostRaidMessageAsync(_channel, _raid);

                    _raidService.AddRaid(_raid, _guild.Id, _channel.Id, raidId);
                    await UserExtensions.SendMessageAsync(_user, "Created the raid successfully.");
                }
                else
                {
                    await UserExtensions.SendMessageAsync(_user, $"Creation of the raid canceled.");
                }
                _conversationService.CloseConversation(_user.Id);
                break;
            }
        }
Example #6
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);
        }