Reward currency to the right player when inviting
This commit is contained in:
parent
df6983516c
commit
8ef038e806
@ -62,7 +62,7 @@ hackerBattleBot.add_ComponentInteractionCreated(AsyncEventHandler(HackerBattle.h
|
||||
storeBot.add_ComponentInteractionCreated(AsyncEventHandler(Store.handleStoreEvents))
|
||||
stealBot.add_ComponentInteractionCreated(AsyncEventHandler(Thief.handleStealButton))
|
||||
inviterBot.add_GuildMemberAdded(AsyncEventHandler(InviteTracker.handleGuildMemberAdded))
|
||||
inviterBot.add_GuildMemberRemoved(AsyncEventHandler(InviteTracker.handleGuildMemberRemoved))
|
||||
//inviterBot.add_GuildMemberRemoved(AsyncEventHandler(InviteTracker.handleGuildMemberRemoved))
|
||||
|
||||
let asdf (_ : DiscordClient) (event : DSharpPlus.EventArgs.InteractionCreateEventArgs) =
|
||||
async {
|
||||
@ -91,7 +91,7 @@ GuildEnvironment.botUserArmory <- Some storeBot.CurrentUser
|
||||
|
||||
//stealBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||
|
||||
//inviterBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||
inviterBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||
|
||||
|
||||
let rec loop areBotsRunning =
|
||||
|
@ -112,6 +112,18 @@ let tryFindPlayer (discordId : uint64) = async {
|
||||
return None
|
||||
}
|
||||
|
||||
let updatePlayerCurrency addAmount (player : PlayerData) =
|
||||
connStr
|
||||
|> Sql.connect
|
||||
|> Sql.parameters [
|
||||
"did", Sql.string (string player.DiscordId)
|
||||
"gbt", Sql.int (int addAmount)
|
||||
] |> Sql.query """
|
||||
UPDATE "user" SET gbt = gbt + @gbt WHERE discord_id = @did;
|
||||
"""
|
||||
|> Sql.executeNonQueryAsync
|
||||
|> Async.AwaitTask
|
||||
|
||||
let updatePlayer (player : PlayerData) =
|
||||
connStr
|
||||
|> Sql.connect
|
||||
|
@ -1,6 +1,5 @@
|
||||
module Degenz.InviteTracker
|
||||
|
||||
|
||||
open System.Text
|
||||
open System.Threading.Tasks
|
||||
open DSharpPlus
|
||||
@ -11,6 +10,7 @@ open Degenz.Messaging
|
||||
open Npgsql.FSharp
|
||||
|
||||
let connStr = GuildEnvironment.connectionString
|
||||
let InviteRewardAmount = 10<GBT>
|
||||
|
||||
type Invite = {
|
||||
Code : string
|
||||
@ -175,16 +175,29 @@ let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) =
|
||||
for invite in guildInvites do
|
||||
let result = cachedInvites.TryFind(invite.Code)
|
||||
match result with
|
||||
| Some (_,count) ->
|
||||
| Some (inviter,count) ->
|
||||
if invite.Uses > count then
|
||||
do! addInvitedUser eventArgs.Member.Id invite.Code invite.Uses |> Async.Ignore
|
||||
let! player = DbService.tryFindPlayer inviter
|
||||
match player with
|
||||
| Some player ->
|
||||
do! DbService.updatePlayerCurrency (int InviteRewardAmount) player |> Async.Ignore
|
||||
let builder = DiscordMessageBuilder()
|
||||
builder.WithContent($"{eventArgs.Member.DisplayName} was invited to the server. <@{player.DiscordId}> just earned {InviteRewardAmount} 💰$GBT!") |> ignore
|
||||
let channel = eventArgs.Guild.GetChannel(GuildEnvironment.channelEventsHackerBattle)
|
||||
do! channel.SendMessageAsync(builder)
|
||||
|> Async.AwaitTask
|
||||
|> Async.Ignore
|
||||
| None -> return ()
|
||||
| None -> ()
|
||||
} :> Task
|
||||
|
||||
let handleGuildMemberRemoved _ (eventArgs : GuildMemberRemoveEventArgs) =
|
||||
task {
|
||||
do! removeInvitedUser eventArgs.Member.Id
|
||||
} :> Task
|
||||
// If we do it like this then there's an obvious exploit where the user can come and go as many times and it will keep
|
||||
// rewarding GBT.
|
||||
//let handleGuildMemberRemoved _ (eventArgs : GuildMemberRemoveEventArgs) =
|
||||
// task {
|
||||
// do! removeInvitedUser eventArgs.Member.Id
|
||||
// } :> Task
|
||||
|
||||
type Inviter() =
|
||||
inherit ApplicationCommandModule ()
|
||||
|
Loading…
x
Reference in New Issue
Block a user