diff --git a/Bot/Thief.fs b/Bot/Thief.fs index 077fbe5..76a2a84 100644 --- a/Bot/Thief.fs +++ b/Bot/Thief.fs @@ -92,6 +92,10 @@ let checkThiefCooldown attacker = Error $"Whoa there you clepto, wait at least another {minutes} before you try stealing again." | None -> Ok attacker +let checkPlayerIsAttackingThemselves defender attacker = + match attacker.DiscordId = defender.DiscordId with + | true -> Error "You think you're clever? You can't steal your own money, you dingleberry." + | false -> Ok attacker let calculateWinPercentage amountRequested bank attackerStrength defenderStrength = let powerPercentage = float (attackerStrength - defenderStrength) * 0.005 + 0.1 @@ -106,9 +110,9 @@ let calculateWinPercentage amountRequested bank attackerStrength defenderStrengt let steal target amount (ctx : IDiscordContext) = Game.executePlayerActionWithTarget target ctx (fun thief victim -> async { do! -// thief + thief + |> checkPlayerIsAttackingThemselves victim // |> checkVictimStealingCooldown victim - Ok thief |> handleResultWithResponse ctx (fun _ -> async { let cappedPrize , winPercentage , wasCapped = calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength @@ -176,6 +180,12 @@ let handleSteal (ctx : IDiscordContext) = } do! DbService.updatePlayer GuildEnvironment.pgDb { thief with Bank = thief.Bank + prize } |> Async.Ignore do! DbService.addPlayerEvent GuildEnvironment.pgDb victim.DiscordId stole |> Async.Ignore + let builder = DiscordMessageBuilder() + builder.WithContent($"{thief.Name} stole {prize} from <@{victim.DiscordId}>!") |> ignore + let channel = ctx.GetGuild().GetChannel(GuildEnvironment.channelEventsHackerBattle) + do! channel.SendMessageAsync(builder) + |> Async.AwaitTask + |> Async.Ignore | false -> let embed = getResultEmbed' WentToPrison let imprisoned = { @@ -188,6 +198,12 @@ let handleSteal (ctx : IDiscordContext) = do! Async.Sleep 2000 let role = ctx.GetGuild().GetRole(GuildEnvironment.rolePrisoner) do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask + let builder = DiscordMessageBuilder() + builder.WithContent($"{thief.Name} went to prison for trying to steal from {victim.Name}!") |> ignore + let channel = ctx.GetGuild().GetChannel(GuildEnvironment.channelEventsHackerBattle) + do! channel.SendMessageAsync(builder) + |> Async.AwaitTask + |> Async.Ignore } if answer = "yes" then let targetId = uint64 tokens.[2]