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))
|
storeBot.add_ComponentInteractionCreated(AsyncEventHandler(Store.handleStoreEvents))
|
||||||
stealBot.add_ComponentInteractionCreated(AsyncEventHandler(Thief.handleStealButton))
|
stealBot.add_ComponentInteractionCreated(AsyncEventHandler(Thief.handleStealButton))
|
||||||
inviterBot.add_GuildMemberAdded(AsyncEventHandler(InviteTracker.handleGuildMemberAdded))
|
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) =
|
let asdf (_ : DiscordClient) (event : DSharpPlus.EventArgs.InteractionCreateEventArgs) =
|
||||||
async {
|
async {
|
||||||
@ -91,7 +91,7 @@ GuildEnvironment.botUserArmory <- Some storeBot.CurrentUser
|
|||||||
|
|
||||||
//stealBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
//stealBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||||
|
|
||||||
//inviterBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
inviterBot.ConnectAsync() |> Async.AwaitTask |> Async.RunSynchronously
|
||||||
|
|
||||||
|
|
||||||
let rec loop areBotsRunning =
|
let rec loop areBotsRunning =
|
||||||
|
@ -112,6 +112,18 @@ let tryFindPlayer (discordId : uint64) = async {
|
|||||||
return None
|
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) =
|
let updatePlayer (player : PlayerData) =
|
||||||
connStr
|
connStr
|
||||||
|> Sql.connect
|
|> Sql.connect
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
module Degenz.InviteTracker
|
module Degenz.InviteTracker
|
||||||
|
|
||||||
|
|
||||||
open System.Text
|
open System.Text
|
||||||
open System.Threading.Tasks
|
open System.Threading.Tasks
|
||||||
open DSharpPlus
|
open DSharpPlus
|
||||||
@ -11,6 +10,7 @@ open Degenz.Messaging
|
|||||||
open Npgsql.FSharp
|
open Npgsql.FSharp
|
||||||
|
|
||||||
let connStr = GuildEnvironment.connectionString
|
let connStr = GuildEnvironment.connectionString
|
||||||
|
let InviteRewardAmount = 10<GBT>
|
||||||
|
|
||||||
type Invite = {
|
type Invite = {
|
||||||
Code : string
|
Code : string
|
||||||
@ -175,16 +175,29 @@ let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) =
|
|||||||
for invite in guildInvites do
|
for invite in guildInvites do
|
||||||
let result = cachedInvites.TryFind(invite.Code)
|
let result = cachedInvites.TryFind(invite.Code)
|
||||||
match result with
|
match result with
|
||||||
| Some (_,count) ->
|
| Some (inviter,count) ->
|
||||||
if invite.Uses > count then
|
if invite.Uses > count then
|
||||||
do! addInvitedUser eventArgs.Member.Id invite.Code invite.Uses |> Async.Ignore
|
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 -> ()
|
| None -> ()
|
||||||
} :> Task
|
} :> Task
|
||||||
|
|
||||||
let handleGuildMemberRemoved _ (eventArgs : GuildMemberRemoveEventArgs) =
|
// 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
|
||||||
task {
|
// rewarding GBT.
|
||||||
do! removeInvitedUser eventArgs.Member.Id
|
//let handleGuildMemberRemoved _ (eventArgs : GuildMemberRemoveEventArgs) =
|
||||||
} :> Task
|
// task {
|
||||||
|
// do! removeInvitedUser eventArgs.Member.Id
|
||||||
|
// } :> Task
|
||||||
|
|
||||||
type Inviter() =
|
type Inviter() =
|
||||||
inherit ApplicationCommandModule ()
|
inherit ApplicationCommandModule ()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user