module Degenz.Analytics open DSharpPlus.Entities open Mixpanel let private mix = MixpanelClient(GuildEnvironment.tokenMixpanel) let private track eventName id data = async { 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 ] let! _ = mix.TrackAsync(eventName, mapObj @ map |> dict) |> Async.AwaitTask return () } 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 (channel : DiscordChannel) = let data = [ "user_display_name" , name "origin" , origin "channel_id" , string channel.Id "channel_name" , channel.Name ] track "Recruit Command Invoked" id data let recruitLinkButton inviteCode id name (channel : DiscordChannel) = let data = [ "user_display_name" , name "invite_code" , inviteCode "channel_id" , string channel.Id "channel_name" , channel.Name ] track "Recruited Link Button Clicked" id data let recruitedCommand totalUsers id name (channel : DiscordChannel) = let data = [ "user_display_name" , name "total_users_at_the_time" , string totalUsers "channel_id" , string channel.Id "channel_name" , channel.Name ] 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 stock id name = let data = [ "user_display_name" , name "purchase_price" , string amount "stock" , string stock ] 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 let arsenalCommand (discordMember : DiscordMember) = let data = [ "user_display_name" , discordMember.Username ] track "Arsenal Command Invoked" discordMember.Id data let buyWeaponCommand (discordMember : DiscordMember) weaponType = let data = [ "user_display_name" , discordMember.Username "weapon_type" , string weaponType ] track "Buy Weapon Command Invoked" discordMember.Id data let sellWeaponCommand (discordMember : DiscordMember) weaponType = let data = [ "user_display_name" , discordMember.Username "weapon_type" , string weaponType ] track "Sell Weapon Command Invoked" discordMember.Id data let buyWeaponButton (discordMember : DiscordMember) (weapon : ItemDetails) = let data = [ "user_display_name" , discordMember.Username "weapon_name" , weapon.Name "weapon_price" , string weapon.Price ] track "Buy Weapon Button Clicked" discordMember.Id data let sellWeaponButton (discordMember : DiscordMember) (weapon : ItemDetails) = let data = [ "user_display_name" , discordMember.Username "weapon_name" , weapon.Name "weapon_price" , string weapon.Price ] track "Sell Weapon Button Clicked" discordMember.Id data let hackCommand (discordMember : DiscordMember) = let data = [ "user_display_name" , discordMember.Username ] track "Hack Command Invoked" discordMember.Id data let shieldCommand (discordMember : DiscordMember) = let data = [ "user_display_name" , discordMember.Username ] track "Shield Command Invoked" discordMember.Id data let hackedTarget (discordMember : DiscordMember) hackName success = let data = [ "user_display_name" , discordMember.Username "hack_name" , hackName "was_successful" , string success ] track "Hack Button Clicked" discordMember.Id data let shieldActivated (discordMember : DiscordMember) shieldName = let data = [ "user_display_name" , discordMember.Username "shield_name" , shieldName ] track "Shield Button Clicked" discordMember.Id data