More tracking
This commit is contained in:
parent
a0a4e94e40
commit
ed722ec8c4
@ -1,5 +1,6 @@
|
|||||||
module Degenz.Analytics
|
module Degenz.Analytics
|
||||||
|
|
||||||
|
open DSharpPlus.Entities
|
||||||
open Mixpanel
|
open Mixpanel
|
||||||
|
|
||||||
let private mix = MixpanelClient(GuildEnvironment.tokenMixpanel)
|
let private mix = MixpanelClient(GuildEnvironment.tokenMixpanel)
|
||||||
@ -30,30 +31,30 @@ let invitedUserAccepted inviteCode inviterId inviteeId inviterName inviteeName =
|
|||||||
]
|
]
|
||||||
track "Invited User Accepted" inviterId data
|
track "Invited User Accepted" inviterId data
|
||||||
|
|
||||||
let recruitCommand origin id name channelId channelName =
|
let recruitCommand origin id name (channel : DiscordChannel) =
|
||||||
let data = [
|
let data = [
|
||||||
"user_display_name" , name
|
"user_display_name" , name
|
||||||
"origin" , origin
|
"origin" , origin
|
||||||
"channel_id" , string channelId
|
"channel_id" , string channel.Id
|
||||||
"channel_name" , channelName
|
"channel_name" , channel.Name
|
||||||
]
|
]
|
||||||
track "Recruit Command Invoked" id data
|
track "Recruit Command Invoked" id data
|
||||||
|
|
||||||
let recruitLinkButton inviteCode id name channelId channelName =
|
let recruitLinkButton inviteCode id name (channel : DiscordChannel) =
|
||||||
let data = [
|
let data = [
|
||||||
"user_display_name" , name
|
"user_display_name" , name
|
||||||
"invite_code" , inviteCode
|
"invite_code" , inviteCode
|
||||||
"channel_id" , string channelId
|
"channel_id" , string channel.Id
|
||||||
"channel_name" , channelName
|
"channel_name" , channel.Name
|
||||||
]
|
]
|
||||||
track "Recruited Link Button Clicked" id data
|
track "Recruited Link Button Clicked" id data
|
||||||
|
|
||||||
let recruitedCommand totalUsers id name channelId channelName =
|
let recruitedCommand totalUsers id name (channel : DiscordChannel) =
|
||||||
let data = [
|
let data = [
|
||||||
"user_display_name" , name
|
"user_display_name" , name
|
||||||
"total_users_at_the_time" , string totalUsers
|
"total_users_at_the_time" , string totalUsers
|
||||||
"channel_id" , string channelId
|
"channel_id" , string channel.Id
|
||||||
"channel_name" , channelName
|
"channel_name" , channel.Name
|
||||||
]
|
]
|
||||||
track "Recruited Command Invoked" id data
|
track "Recruited Command Invoked" id data
|
||||||
|
|
||||||
@ -84,3 +85,65 @@ let trainingDojoCompleted alreadyCompleted id name =
|
|||||||
]
|
]
|
||||||
track "Training Dojo Completed" id data
|
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 id name =
|
||||||
|
let data = [
|
||||||
|
"user_display_name" , name
|
||||||
|
]
|
||||||
|
track "Hack Command Invoked" id data
|
||||||
|
|
||||||
|
let shieldCommand id name =
|
||||||
|
let data = [
|
||||||
|
"user_display_name" , name
|
||||||
|
]
|
||||||
|
track "Hack Command Invoked" 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
|
||||||
|
@ -171,11 +171,13 @@ let handleAttack (ctx : IDiscordContext) =
|
|||||||
>>= checkTargetHasFunds defender
|
>>= checkTargetHasFunds defender
|
||||||
>>= checkWeaponHasCooldown hack.Item
|
>>= checkWeaponHasCooldown hack.Item
|
||||||
|> function
|
|> function
|
||||||
| Ok atkr ->
|
| Ok atkr -> async {
|
||||||
runHackerBattle defender hack
|
let result = runHackerBattle defender hack
|
||||||
|> function
|
match result with
|
||||||
| false -> successfulHack ctx atkr defender hack
|
| false -> do! successfulHack ctx atkr defender hack
|
||||||
| true -> failedHack ctx attacker defender hack
|
| true -> do! failedHack ctx attacker defender hack
|
||||||
|
do! Analytics.hackedTarget (ctx.GetDiscordMember()) hack.Item.Name (not result)
|
||||||
|
}
|
||||||
| Error msg -> Messaging.sendFollowUpMessage ctx msg
|
| Error msg -> Messaging.sendFollowUpMessage ctx msg
|
||||||
| _ -> do! Messaging.sendFollowUpMessage ctx "Error occurred processing attack"
|
| _ -> do! Messaging.sendFollowUpMessage ctx "Error occurred processing attack"
|
||||||
})
|
})
|
||||||
@ -231,8 +233,8 @@ let arsenal (ctx : IDiscordContext) =
|
|||||||
builder.AddEmbed(embed) |> ignore
|
builder.AddEmbed(embed) |> ignore
|
||||||
builder.IsEphemeral <- true
|
builder.IsEphemeral <- true
|
||||||
do! ctx.FollowUp(builder) |> Async.AwaitTask
|
do! ctx.FollowUp(builder) |> Async.AwaitTask
|
||||||
do! DbService.updatePlayer updatedPlayer
|
do! DbService.updatePlayer updatedPlayer |> Async.Ignore
|
||||||
|> Async.Ignore
|
do! Analytics.arsenalCommand (ctx.GetDiscordMember())
|
||||||
})
|
})
|
||||||
|
|
||||||
let handleButtonEvent (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
let handleButtonEvent (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
||||||
|
@ -110,10 +110,13 @@ let checkHasItemsInArsenal itemType items player =
|
|||||||
then Ok player
|
then Ok player
|
||||||
else Error $"You currently have no {itemType} in your arsenal to sell!"
|
else Error $"You currently have no {itemType} in your arsenal to sell!"
|
||||||
|
|
||||||
let buy getItems (ctx : IDiscordContext) =
|
let buy itemType (ctx : IDiscordContext) =
|
||||||
executePlayerAction ctx (fun player -> async {
|
executePlayerAction ctx (fun player -> async {
|
||||||
let itemStore = getBuyItemsEmbed (getItems player.Inventory) (getItems Armory.weapons)
|
let playerItems = Inventory.getItemsByType itemType player.Inventory
|
||||||
|
let armoryItems = Inventory.getItemsByType itemType Armory.weapons
|
||||||
|
let itemStore = getBuyItemsEmbed playerItems armoryItems
|
||||||
do! ctx.FollowUp itemStore |> Async.AwaitTask
|
do! ctx.FollowUp itemStore |> Async.AwaitTask
|
||||||
|
do! Analytics.buyWeaponCommand (ctx.GetDiscordMember()) itemType
|
||||||
})
|
})
|
||||||
|
|
||||||
let sell itemType getItems (ctx : IDiscordContext) =
|
let sell itemType getItems (ctx : IDiscordContext) =
|
||||||
@ -123,6 +126,7 @@ let sell itemType getItems (ctx : IDiscordContext) =
|
|||||||
| Ok _ -> let itemStore = getSellEmbed items
|
| Ok _ -> let itemStore = getSellEmbed items
|
||||||
do! ctx.FollowUp(itemStore) |> Async.AwaitTask
|
do! ctx.FollowUp(itemStore) |> Async.AwaitTask
|
||||||
| Error e -> do! sendFollowUpMessage ctx e
|
| Error e -> do! sendFollowUpMessage ctx e
|
||||||
|
do! Analytics.sellWeaponCommand (ctx.GetDiscordMember()) itemType
|
||||||
})
|
})
|
||||||
|
|
||||||
// TODO: When you buy a shield, prompt the user to activate it
|
// TODO: When you buy a shield, prompt the user to activate it
|
||||||
@ -137,6 +141,7 @@ let handleBuyItem (ctx : IDiscordContext) itemId =
|
|||||||
let p = { player with Bank = newBalance ; Inventory = item::player.Inventory }
|
let p = { player with Bank = newBalance ; Inventory = item::player.Inventory }
|
||||||
do! DbService.updatePlayer p |> Async.Ignore
|
do! DbService.updatePlayer p |> Async.Ignore
|
||||||
do! sendFollowUpMessage ctx $"Successfully purchased {item.Name}! You now have {newBalance} 💰$GBT remaining"
|
do! sendFollowUpMessage ctx $"Successfully purchased {item.Name}! You now have {newBalance} 💰$GBT remaining"
|
||||||
|
do! Analytics.buyWeaponButton (ctx.GetDiscordMember()) item
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -155,7 +160,8 @@ let handleSell (ctx : IDiscordContext) itemId =
|
|||||||
do!
|
do!
|
||||||
[ DbService.updatePlayer updatedPlayer |> Async.Ignore
|
[ DbService.updatePlayer updatedPlayer |> Async.Ignore
|
||||||
DbService.removeShieldEvent updatedPlayer.DiscordId itemId |> Async.Ignore
|
DbService.removeShieldEvent updatedPlayer.DiscordId itemId |> Async.Ignore
|
||||||
sendFollowUpMessage ctx $"Sold {item.Name} for {item.Price}! Current Balance: {updatedPlayer.Bank}" ]
|
sendFollowUpMessage ctx $"Sold {item.Name} for {item.Price}! Current Balance: {updatedPlayer.Bank}"
|
||||||
|
Analytics.sellWeaponButton (ctx.GetDiscordMember()) item ]
|
||||||
|> Async.Parallel
|
|> Async.Parallel
|
||||||
|> Async.Ignore
|
|> Async.Ignore
|
||||||
})
|
})
|
||||||
@ -203,7 +209,7 @@ type Store() =
|
|||||||
let checkChannel (ctx : IDiscordContext) =
|
let checkChannel (ctx : IDiscordContext) =
|
||||||
match ctx.GetChannel().Id with
|
match ctx.GetChannel().Id with
|
||||||
// | id when id = GuildEnvironment.channelBackAlley -> buy (Inventory.getItemsByType ItemType.Hack) ctx
|
// | id when id = GuildEnvironment.channelBackAlley -> buy (Inventory.getItemsByType ItemType.Hack) ctx
|
||||||
| id when id = GuildEnvironment.channelArmory -> buy (Inventory.getItemsByType ItemType.Shield) ctx
|
| id when id = GuildEnvironment.channelArmory -> buy ItemType.Shield ctx
|
||||||
// | id when id = GuildEnvironment.channelMarket -> buy (Inventory.getItemsByType ItemType.Food) ctx
|
// | id when id = GuildEnvironment.channelMarket -> buy (Inventory.getItemsByType ItemType.Food) ctx
|
||||||
// | id when id = GuildEnvironment.channelAccessoryShop -> buy (Inventory.getItemsByType ItemType.Accessory) ctx
|
// | id when id = GuildEnvironment.channelAccessoryShop -> buy (Inventory.getItemsByType ItemType.Accessory) ctx
|
||||||
| _ ->
|
| _ ->
|
||||||
@ -216,10 +222,12 @@ type Store() =
|
|||||||
// member _.BuyItem (ctx : InteractionContext) = checkChannel (DiscordInteractionContext(ctx))
|
// member _.BuyItem (ctx : InteractionContext) = checkChannel (DiscordInteractionContext(ctx))
|
||||||
//
|
//
|
||||||
[<SlashCommand("buy-hack", "Purchase a hack so you can take money from other Degenz")>]
|
[<SlashCommand("buy-hack", "Purchase a hack so you can take money from other Degenz")>]
|
||||||
member _.BuyHack (ctx : InteractionContext) = enforceChannel (DiscordInteractionContext(ctx)) (buy (Inventory.getItemsByType ItemType.Hack))
|
member _.BuyHack (ctx : InteractionContext) =
|
||||||
|
enforceChannel (DiscordInteractionContext(ctx)) (buy ItemType.Hack)
|
||||||
|
|
||||||
[<SlashCommand("buy-shield", "Purchase a hack shield so you can protect your GBT")>]
|
[<SlashCommand("buy-shield", "Purchase a hack shield so you can protect your GBT")>]
|
||||||
member this.BuyShield (ctx : InteractionContext) = enforceChannel (DiscordInteractionContext(ctx)) (buy (Inventory.getItemsByType ItemType.Shield))
|
member this.BuyShield (ctx : InteractionContext) =
|
||||||
|
enforceChannel (DiscordInteractionContext(ctx)) (buy ItemType.Shield)
|
||||||
|
|
||||||
// [<SlashCommand("buy-food", "Purchase a food item to help boost your stats")>]
|
// [<SlashCommand("buy-food", "Purchase a food item to help boost your stats")>]
|
||||||
// member this.BuyFood (ctx : InteractionContext) = enforceChannel (DiscordInteractionContext(ctx)) (buy (Inventory.getItemsByType ItemType.Food))
|
// member this.BuyFood (ctx : InteractionContext) = enforceChannel (DiscordInteractionContext(ctx)) (buy (Inventory.getItemsByType ItemType.Food))
|
||||||
|
@ -216,7 +216,7 @@ let private showInviteMessage (ctx : IDiscordContext) origin =
|
|||||||
You must **COMPLETE YOUR TRAINING FIRST!** Then you can `/recruit`...
|
You must **COMPLETE YOUR TRAINING FIRST!** Then you can `/recruit`...
|
||||||
Go to <#{GuildEnvironment.channelTraining}> now to become a **HACKER**!
|
Go to <#{GuildEnvironment.channelTraining}> now to become a **HACKER**!
|
||||||
"""
|
"""
|
||||||
do! Analytics.recruitCommand origin player.DiscordId (ctx.GetDiscordMember().Username) (ctx.GetChannel().Id) (ctx.GetChannel().Name)
|
do! Analytics.recruitCommand origin player.DiscordId (ctx.GetDiscordMember().Username) (ctx.GetChannel())
|
||||||
| None ->
|
| None ->
|
||||||
do! sendFollowUpMessage ctx $"You're not in the game! Go to <#{GuildEnvironment.channelShelters}> NOW to get assigned a private bunk, and **JOIN THE GAME!**"
|
do! sendFollowUpMessage ctx $"You're not in the game! Go to <#{GuildEnvironment.channelShelters}> NOW to get assigned a private bunk, and **JOIN THE GAME!**"
|
||||||
} :> Task
|
} :> Task
|
||||||
@ -262,7 +262,7 @@ let private getInvitedUsersForId (ctx : IDiscordContext) = task {
|
|||||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
|
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
|
||||||
let user = ctx.GetDiscordMember()
|
let user = ctx.GetDiscordMember()
|
||||||
let channel = ctx.GetChannel()
|
let channel = ctx.GetChannel()
|
||||||
do! Analytics.recruitedCommand total user.Id user.Username channel.Id channel.Name
|
do! Analytics.recruitedCommand total user.Id user.Username channel
|
||||||
}
|
}
|
||||||
|
|
||||||
let clearInvites (ctx : IDiscordContext) = task {
|
let clearInvites (ctx : IDiscordContext) = task {
|
||||||
@ -542,7 +542,7 @@ let handleCreateInvite (ctx : IDiscordContext) =
|
|||||||
.AsEphemeral(true)
|
.AsEphemeral(true)
|
||||||
|
|
||||||
do! ctx.FollowUp(msg)
|
do! ctx.FollowUp(msg)
|
||||||
do! Analytics.recruitLinkButton code user.Id user.Username (ctx.GetChannel().Id) (ctx.GetChannel().Name)
|
do! Analytics.recruitLinkButton code user.Id user.Username (ctx.GetChannel())
|
||||||
} :> Task
|
} :> Task
|
||||||
|
|
||||||
let handleButtonEvent (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
let handleButtonEvent (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user