Make trainer analytics individual events

This commit is contained in:
Joseph Ferano 2022-03-31 15:30:32 +07:00
parent 694cab3e49
commit a0a4e94e40
3 changed files with 25 additions and 18 deletions

View File

@ -5,17 +5,18 @@ open Mixpanel
let private mix = MixpanelClient(GuildEnvironment.tokenMixpanel)
let private track eventName id data =
let mapObj = data |> List.map (fun e -> ( fst e , snd e |> box) )
let map =
[ "distinct_id" , box id
"guild_id" , box GuildEnvironment.guildId
[ "distinct_id" , box (string id)
"guild_id" , box (string GuildEnvironment.guildId)
"env" , box GuildEnvironment.environment ]
mix.TrackAsync(eventName, data @ map |> dict) |> Async.AwaitTask |> Async.Ignore
mix.TrackAsync(eventName, mapObj @ map |> dict) |> Async.AwaitTask |> Async.Ignore
let invitedUserEntered inviteCode inviterId inviteeId inviterName inviteeName =
let data = [
"user_display_name" , inviterName
"invite_code" , inviteCode
"invitee_id" , inviteeId
"invitee_id" , string inviteeId
"invitee_name" , inviteeName
]
track "Invited User Entered" inviterId data
@ -24,7 +25,7 @@ let invitedUserAccepted inviteCode inviterId inviteeId inviterName inviteeName =
let data = [
"user_display_name" , inviterName
"invite_code" , inviteCode
"invitee_id" , inviteeId
"invitee_id" , string inviteeId
"invitee_name" , inviteeName
]
track "Invited User Accepted" inviterId data
@ -33,7 +34,7 @@ let recruitCommand origin id name channelId channelName =
let data = [
"user_display_name" , name
"origin" , origin
"channel_id" , channelId
"channel_id" , string channelId
"channel_name" , channelName
]
track "Recruit Command Invoked" id data
@ -42,16 +43,16 @@ let recruitLinkButton inviteCode id name channelId channelName =
let data = [
"user_display_name" , name
"invite_code" , inviteCode
"channel_id" , channelId
"channel_id" , string channelId
"channel_name" , channelName
]
track "Recruited Command Invoked" id data
track "Recruited Link Button Clicked" id data
let recruitedCommand totalUsers id name channelId channelName =
let data = [
"user_display_name" , name
"total_users_at_the_time" , totalUsers
"channel_id" , channelId
"total_users_at_the_time" , string totalUsers
"channel_id" , string channelId
"channel_name" , channelName
]
track "Recruited Command Invoked" id data
@ -61,19 +62,25 @@ let whiteListButton availability id name =
"user_display_name" , name
"availability" , availability
]
track "Recruited Command Invoked" id data
track "Whitelist Button Clicked" id data
let whiteListPurchased amount id name =
let data = [
"user_display_name" , name
"purchase_amount" , amount
"purchase_amount" , string amount
]
track "Recruited Command Invoked" id data
track "Whitelist Purchased" id data
let trainingDojoStep step id name =
let data = [
"user_display_name" , name
"step" , step
]
track "Recruited Command Invoked" id data
track ("Training Dojo " + step) id data
let trainingDojoCompleted alreadyCompleted id name =
let data = [
"user_display_name" , name
"previously_completed" , string alreadyCompleted
]
track "Training Dojo Completed" id data

View File

@ -187,7 +187,7 @@ type the `/arsenal` command NOW"""
do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask
do! sendFollowUpMessage ctx ($"Your training is now complete. If you want to buy more **HACKS & SHIELDS**, go to the <#{GuildEnvironment.channelArmory}> and type the `/buy-hack` and `/buy-shield` commands!")
do! Analytics.trainingDojoStep "CompletedNoGifts" (ctx.GetDiscordMember().Id) (ctx.GetDiscordMember().Username)
do! Analytics.trainingDojoStep "Completed" (ctx.GetDiscordMember().Id) (ctx.GetDiscordMember().Username)
})
let handleArsenal (ctx : IDiscordContext) = PlayerInteractions.executePlayerAction ctx (fun player -> async {
@ -242,7 +242,7 @@ let handleArsenal (ctx : IDiscordContext) = PlayerInteractions.executePlayerActi
do! Async.Sleep 1000
do! sendFollowUpMessage ctx $"Now get out of there and go hack other Degenz in the <#{GuildEnvironment.channelBattle}> channel!"
do! Analytics.trainingDojoStep "CompletedWithGifts" (ctx.GetDiscordMember().Id) (ctx.GetDiscordMember().Username)
do! Analytics.trainingDojoCompleted false (ctx.GetDiscordMember().Id) (ctx.GetDiscordMember().Username)
else
let role = ctx.GetGuild().GetRole(GuildEnvironment.roleTrainee)
do! ctx.GetDiscordMember().RevokeRoleAsync(role) |> Async.AwaitTask

View File

@ -285,8 +285,8 @@ let private processNewUser (eventArgs : GuildMemberAddEventArgs) =
match result with
| Some (_,count) ->
if invite.Uses > count then
do! Analytics.invitedUserEntered invite.Code invite.Inviter.Id eventArgs.Member.Id invite.Inviter.Username eventArgs.Member.Username
do! addInvitedUser eventArgs.Member.Id invite.Code invite.Uses |> Async.Ignore
do! Analytics.invitedUserEntered invite.Code invite.Inviter.Id eventArgs.Member.Id invite.Inviter.Username eventArgs.Member.Username
| None -> ()
} :> Task