module Degenz.Analytics 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 (string id) "guild_id" , box (string GuildEnvironment.guildId) "env" , box GuildEnvironment.environment ] 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" , string inviteeId "invitee_name" , inviteeName ] track "Invited User Entered" inviterId data let invitedUserAccepted inviteCode inviterId inviteeId inviterName inviteeName = let data = [ "user_display_name" , inviterName "invite_code" , inviteCode "invitee_id" , string inviteeId "invitee_name" , inviteeName ] track "Invited User Accepted" inviterId data let recruitCommand origin id name channelId channelName = let data = [ "user_display_name" , name "origin" , origin "channel_id" , string channelId "channel_name" , channelName ] track "Recruit Command Invoked" id data let recruitLinkButton inviteCode id name channelId channelName = let data = [ "user_display_name" , name "invite_code" , inviteCode "channel_id" , string channelId "channel_name" , channelName ] 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" , string totalUsers "channel_id" , string channelId "channel_name" , channelName ] track "Recruited Command Invoked" id data let whiteListButton availability id name = let data = [ "user_display_name" , name "availability" , availability ] track "Whitelist Button Clicked" id data let whiteListPurchased amount id name = let data = [ "user_display_name" , name "purchase_amount" , string amount ] track "Whitelist Purchased" id data let trainingDojoStep step id name = let data = [ "user_display_name" , name ] 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