Skip to content

Commit 8f82050

Browse files
authored
Merge pull request #31 from metrik-tech/feature/ENG-177
feature/eng 177: Add support for USER datatype in actions
2 parents 8290529 + e7f49c2 commit 8f82050

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed

Src/Data/ApiPaths.luau

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ return table.freeze({
1414
ReturnAction = "/projects/%s/actions/return",
1515
ClaimAction = "/projects/%s/actions/claim",
1616

17+
GetUserInformation = "/projects/%s/proxy/users/%s",
18+
1719
GetModerationStatus = "/projects/%s/moderation/status",
1820

1921
GetAllFlags = "/projects/%s/flags/get",

Src/Enums/ArgumentType.luau

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ return table.freeze({
22
String = "STRING",
33
Number = "NUMBER",
44
Boolean = "BOOLEAN",
5-
Player = "PLAYER"
5+
Player = "PLAYER",
6+
User = "USER"
67
})

Src/Services/ActionService.luau

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ local ApiPaths = require(script.Parent.Parent.Data.ApiPaths)
1515
local ArgumentType = require(script.Parent.Parent.Enums.ArgumentType)
1616
local ActionBehaviour = require(script.Parent.Parent.Enums.ActionBehaviour)
1717

18+
local UserService = require(script.Parent.UserService)
1819
local ApiService = require(script.Parent.ApiService)
1920

2021
local DELAY_BEFORE_MARKING_ACTION_AS_PENDING = 5
@@ -50,6 +51,8 @@ function ActionService.ParseArgument(self: ActionService, argumentData: any, ser
5051
return serverArgumentData.value
5152
elseif argumentData.Type == ArgumentType.Player then
5253
return Players:GetPlayerByUserId(serverArgumentData.value)
54+
elseif argumentData.Type == ArgumentType.User then
55+
return UserService:GetUserAsync(serverArgumentData.value):expect()
5356
end
5457

5558
return

Src/Services/UserService.luau

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
local HttpService = game:GetService("HttpService")
2+
3+
local Console = require(script.Parent.Parent.Packages.Console)
4+
local Promise = require(script.Parent.Parent.Packages.Promise)
5+
6+
local ApiService = require(script.Parent.ApiService)
7+
8+
local ApiPaths = require(script.Parent.Parent.Data.ApiPaths)
9+
10+
local UserService = { }
11+
12+
UserService.Priority = 0
13+
UserService.Reporter = Console.new(`{script.Name}`)
14+
15+
UserService.UserStore = {} :: { [number]: User }
16+
17+
function UserService.GetUserAsync(self: UserService, userId: number)
18+
return Promise.new(function(resolve, reject)
19+
if self.UserStore[userId] then
20+
return resolve(self.UserStore[userId])
21+
end
22+
23+
ApiService:GetAsync(string.format(ApiPaths.GetUserInformation, ApiService.ProjectId, userId), { }):andThen(function(response)
24+
local userInformation = HttpService:JSONDecode(response.Body)
25+
26+
self.UserStore[userId] = {
27+
Description = userInformation.description,
28+
Created = DateTime.fromIsoDate(userInformation.created),
29+
IsBanned = userInformation.IsBanned,
30+
ExternalAppDisplayName = userInformation.ExternalAppDisplayName,
31+
HasVerifiedBadge = userInformation.HasVerifiedBadge,
32+
Id = userInformation.Id,
33+
Name = userInformation.Name,
34+
DisplayName = userInformation.DisplayName
35+
}
36+
37+
resolve(self.UserStore[userId])
38+
end)
39+
40+
return
41+
end)
42+
end
43+
44+
export type UserService = typeof(UserService)
45+
export type User = {
46+
Description: string,
47+
Created: DateTime,
48+
IsBanned: boolean,
49+
ExternalAppDisplayName: string?,
50+
HasVerifiedBadge: boolean,
51+
Id: number,
52+
Name: string,
53+
DisplayName: string
54+
}
55+
56+
return UserService

0 commit comments

Comments
 (0)