More tracking
This commit is contained in:
parent
a0a4e94e40
commit
ed722ec8c4
@ -1,5 +1,6 @@
|
||||
module Degenz.Analytics
|
||||
|
||||
open DSharpPlus.Entities
|
||||
open Mixpanel
|
||||
|
||||
let private mix = MixpanelClient(GuildEnvironment.tokenMixpanel)
|
||||
@ -30,30 +31,30 @@ let invitedUserAccepted inviteCode inviterId inviteeId inviterName inviteeName =
|
||||
]
|
||||
track "Invited User Accepted" inviterId data
|
||||
|
||||
let recruitCommand origin id name channelId channelName =
|
||||
let recruitCommand origin id name (channel : DiscordChannel) =
|
||||
let data = [
|
||||
"user_display_name" , name
|
||||
"origin" , origin
|
||||
"channel_id" , string channelId
|
||||
"channel_name" , channelName
|
||||
"channel_id" , string channel.Id
|
||||
"channel_name" , channel.Name
|
||||
]
|
||||
track "Recruit Command Invoked" id data
|
||||
|
||||
let recruitLinkButton inviteCode id name channelId channelName =
|
||||
let recruitLinkButton inviteCode id name (channel : DiscordChannel) =
|
||||
let data = [
|
||||
"user_display_name" , name
|
||||
"invite_code" , inviteCode
|
||||
"channel_id" , string channelId
|
||||
"channel_name" , channelName
|
||||
"channel_id" , string channel.Id
|
||||
"channel_name" , channel.Name
|
||||
]
|
||||
track "Recruited Link Button Clicked" id data
|
||||
|
||||
let recruitedCommand totalUsers id name channelId channelName =
|
||||
let recruitedCommand totalUsers id name (channel : DiscordChannel) =
|
||||
let data = [
|
||||
"user_display_name" , name
|
||||
"total_users_at_the_time" , string totalUsers
|
||||
"channel_id" , string channelId
|
||||
"channel_name" , channelName
|
||||
"channel_id" , string channel.Id
|
||||
"channel_name" , channel.Name
|
||||
]
|
||||
track "Recruited Command Invoked" id data
|
||||
|
||||
@ -84,3 +85,65 @@ let trainingDojoCompleted alreadyCompleted id name =
|
||||
]
|
||||
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
|
||||
>>= checkWeaponHasCooldown hack.Item
|
||||
|> function
|
||||
| Ok atkr ->
|
||||
runHackerBattle defender hack
|
||||
|> function
|
||||
| false -> successfulHack ctx atkr defender hack
|
||||
| true -> failedHack ctx attacker defender hack
|
||||
| Ok atkr -> async {
|
||||
let result = runHackerBattle defender hack
|
||||
match result with
|
||||
| false -> do! successfulHack ctx atkr 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
|
||||
| _ -> do! Messaging.sendFollowUpMessage ctx "Error occurred processing attack"
|
||||
})
|
||||
@ -231,8 +233,8 @@ let arsenal (ctx : IDiscordContext) =
|
||||
builder.AddEmbed(embed) |> ignore
|
||||
builder.IsEphemeral <- true
|
||||
do! ctx.FollowUp(builder) |> Async.AwaitTask
|
||||
do! DbService.updatePlayer updatedPlayer
|
||||
|> Async.Ignore
|
||||
do! DbService.updatePlayer updatedPlayer |> Async.Ignore
|
||||
do! Analytics.arsenalCommand (ctx.GetDiscordMember())
|
||||
})
|
||||
|
||||
let handleButtonEvent (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
||||
|
@ -110,10 +110,13 @@ let checkHasItemsInArsenal itemType items player =
|
||||
then Ok player
|
||||
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 {
|
||||
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! Analytics.buyWeaponCommand (ctx.GetDiscordMember()) itemType
|
||||
})
|
||||
|
||||
let sell itemType getItems (ctx : IDiscordContext) =
|
||||
@ -123,6 +126,7 @@ let sell itemType getItems (ctx : IDiscordContext) =
|
||||
| Ok _ -> let itemStore = getSellEmbed items
|
||||
do! ctx.FollowUp(itemStore) |> Async.AwaitTask
|
||||
| Error e -> do! sendFollowUpMessage ctx e
|
||||
do! Analytics.sellWeaponCommand (ctx.GetDiscordMember()) itemType
|
||||
})
|
||||
|
||||
// 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 }
|
||||
do! DbService.updatePlayer p |> Async.Ignore
|
||||
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!
|
||||
[ DbService.updatePlayer updatedPlayer |> 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.Ignore
|
||||
})
|
||||
@ -203,7 +209,7 @@ type Store() =
|
||||
let checkChannel (ctx : IDiscordContext) =
|
||||
match ctx.GetChannel().Id with
|
||||
// | 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.channelAccessoryShop -> buy (Inventory.getItemsByType ItemType.Accessory) ctx
|
||||
| _ ->
|
||||
@ -216,10 +222,12 @@ type Store() =
|
||||
// member _.BuyItem (ctx : InteractionContext) = checkChannel (DiscordInteractionContext(ctx))
|
||||
//
|
||||
[<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")>]
|
||||
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")>]
|
||||
// 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`...
|
||||
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 ->
|
||||
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
|
||||
@ -262,7 +262,7 @@ let private getInvitedUsersForId (ctx : IDiscordContext) = task {
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, msg)
|
||||
let user = ctx.GetDiscordMember()
|
||||
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 {
|
||||
@ -542,7 +542,7 @@ let handleCreateInvite (ctx : IDiscordContext) =
|
||||
.AsEphemeral(true)
|
||||
|
||||
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
|
||||
|
||||
let handleButtonEvent (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
||||
|
Loading…
x
Reference in New Issue
Block a user