Send messages and check for same player

This commit is contained in:
Joseph Ferano 2022-02-24 21:18:33 +07:00
parent 902d96d877
commit 658c57f97b

View File

@ -92,6 +92,10 @@ let checkThiefCooldown attacker =
Error $"Whoa there you clepto, wait at least another {minutes} before you try stealing again." Error $"Whoa there you clepto, wait at least another {minutes} before you try stealing again."
| None -> Ok attacker | 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 calculateWinPercentage amountRequested bank attackerStrength defenderStrength =
let powerPercentage = float (attackerStrength - defenderStrength) * 0.005 + 0.1 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) = let steal target amount (ctx : IDiscordContext) =
Game.executePlayerActionWithTarget target ctx (fun thief victim -> async { do! Game.executePlayerActionWithTarget target ctx (fun thief victim -> async { do!
// thief thief
|> checkPlayerIsAttackingThemselves victim
// |> checkVictimStealingCooldown victim // |> checkVictimStealingCooldown victim
Ok thief
|> handleResultWithResponse ctx (fun _ -> async { |> handleResultWithResponse ctx (fun _ -> async {
let cappedPrize , winPercentage , wasCapped = let cappedPrize , winPercentage , wasCapped =
calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength 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.updatePlayer GuildEnvironment.pgDb { thief with Bank = thief.Bank + prize } |> Async.Ignore
do! DbService.addPlayerEvent GuildEnvironment.pgDb victim.DiscordId stole |> 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 -> | false ->
let embed = getResultEmbed' WentToPrison let embed = getResultEmbed' WentToPrison
let imprisoned = { let imprisoned = {
@ -188,6 +198,12 @@ let handleSteal (ctx : IDiscordContext) =
do! Async.Sleep 2000 do! Async.Sleep 2000
let role = ctx.GetGuild().GetRole(GuildEnvironment.rolePrisoner) let role = ctx.GetGuild().GetRole(GuildEnvironment.rolePrisoner)
do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask 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 if answer = "yes" then
let targetId = uint64 tokens.[2] let targetId = uint64 tokens.[2]