discord-bot-game/Bot/Analytics.fs

156 lines
4.9 KiB
Forth

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