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 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 recruitedButton 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 Button Clicked" 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 buyItemCommand (discordMember : DiscordMember) store = let data = [ "user_display_name" , discordMember.Username "store_symbol" , store ] track "Buy Item Command Invoked" discordMember.Id data let sellItemCommand (discordMember : DiscordMember) store = let data = [ "user_display_name" , discordMember.Username "store_symbol" , store ] track "Sell Item Command Invoked" discordMember.Id data let buyItemButton (discordMember : DiscordMember) itemName itemPrice = let data = [ "user_display_name" , discordMember.Username "item_name" , itemName "item_price" , string itemPrice ] track "Buy Weapon Button Clicked" discordMember.Id data let sellItemButton (discordMember : DiscordMember) (item : Item) price = let data = [ "user_display_name" , discordMember.Username "item_name" , item.Name "item_price" , string 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 let prizeTableViewed (discordMember : DiscordMember) = let data = [ "user_display_name" , discordMember.Username ] track "Prize Table Button Clicked" discordMember.Id data let slotPlayed (discordMember : DiscordMember) amount result prize = let data = [ "user_display_name" , discordMember.Username "play_amount" , string amount "result" , result "prize" , string prize ] track "Slots Played" discordMember.Id data let walletSubmit (discordMember : DiscordMember) = let data = [ "user_display_name" , discordMember.Username ] track "Wallet Submitted" discordMember.Id data let invalidWalletSubmit (discordMember : DiscordMember) = let data = [ "user_display_name" , discordMember.Username ] track "Invalid Wallet Submitted" discordMember.Id data