Пример #1
0
        public async Task EnsureCreated(IUser user, IGuild guild)
        {
            var(serverCreated, userCreated) = (false, false);
            var server = await _serverRepository.FindAsync(guild.Id, (qry, ctx) => qry.Include(s => s.ServerBotRoles));

            if (server == null)
            {
                var botRoles = await _botRoleRepository.GetAsync();

                server = new Server
                {
                    Id             = guild.Id,
                    ServerBotRoles = botRoles.Select(role => new ServerBotRole
                    {
                        Role = role
                    }).ToList()
                };
                await _serverRepository.PostAsync(server);

                serverCreated = true;
            }

            var userEntity = await _userRepository.FindAsync(user.Id);

            if (userEntity == null)
            {
                userEntity = new User
                {
                    Id = user.Id,
                };
                await _userRepository.PostAsync(userEntity);

                userCreated = true;
            }

            if (serverCreated || userCreated)
            {
                var botRole = user.Id != _config.OwnerId
                    ? server.ServerBotRoles.FirstOrDefault(br => br.RoleId == (int)BotRoleLevel.User)
                    : server.ServerBotRoles.FirstOrDefault(br => br.RoleId == (int)BotRoleLevel.Owner);
                var serverUser = new ServerUser
                {
                    Role   = botRole,
                    Server = server,
                    User   = userEntity
                };
                await _serverUserRepository.PostAsync(serverUser);

                await _serverUserRepository.SaveAllChangesAsync();
            }
        }
Пример #2
0
        public async Task AuthorizeUser(IUser user)
        {
            await UserDataService.EnsureCreated(user, Context.Guild);

            var server = await _serverRepository.FindAsync(Context.Guild.Id,
                                                           (query, _) => query
                                                           .Include(s => s.ServerUsers)
                                                           .Include(s => s.ServerBotRoles));

            var adminRole  = server.ServerBotRoles.FirstOrDefault(role => role.RoleId == (int)BotRoleLevel.Admin);
            var serverUser = server.ServerUsers.FirstOrDefault(usr => usr.UserId == user.Id);

            serverUser.Role = adminRole;
            await _serverRepository.SaveAllChangesAsync();

            ReplyAsync("User authorized");
        }
Пример #3
0
        public async Task AssignItem(IUser user, [Remainder] string itemName)
        {
            UserDataService.EnsureCreated(user, Context.Guild);
            var server =
                await _serverRepository.FindAsync(Context.Guild.Id, (qry, context) => qry.Include(s => s.ServerUsers));

            var items = (await _itemRepository.QueryItem(itemName)).OrderByDescending(item => item.ItemLevel).ToList();

            if (!items.Any())
            {
                await ReplyAsync($"\"{itemName}\" returned no results.");

                return;
            }

            var item = items.First();

            if (items.Count > 1)
            {
                var selection = await _queryService.SendOptionSelectQuery(
                    $"\"{itemName}\" yielded multiple results. Please select below",
                    items,
                    item => item.Name,
                    Context.Channel, CancellationToken.None);

                if (selection == -1)
                {
                    await ReplyAsync("Operation cancelled");

                    return;
                }

                item = items[selection];
            }

            await ReplyAsync("", false, CreateItemEmbed(item));
        }