diff --git a/Bot/InviteTracker.fs b/Bot/InviteTracker.fs index 21c5e6c..738e4ce 100644 --- a/Bot/InviteTracker.fs +++ b/Bot/InviteTracker.fs @@ -68,20 +68,29 @@ let private createInvite inviter code = |> Sql.executeNonQueryAsync |> Async.AwaitTask -let private addInvitedUser did code count = - try - connStr - |> Sql.connect - |> Sql.executeTransactionAsync [ - """ - INSERT INTO invited_user (discord_id, invite_id) - VALUES (@did, (SELECT id FROM invite WHERE code = @code)); - """ , [ [ "@code" , Sql.string code ; "@did" , Sql.string (string did) ] ] - "UPDATE invite SET count = @count WHERE code = @code" , [ [ "count" , Sql.int count ; "code" , Sql.string code ] ] - ] - |> Async.AwaitTask - |> Async.Ignore - with _ -> async.Zero () +let private addInvitedUser did inviterId code count = + connStr + |> Sql.connect + |> Sql.parameters [ "@code" , Sql.string code ; "@did" , Sql.string (string did) ; "@iid" , Sql.string (string inviterId) ] + |> Sql.query + """ + INSERT INTO invited_user (inviter_id, discord_id, invite_id) + VALUES (@did, (SELECT id FROM invite WHERE code = @code)); + """ + |> Sql.executeNonQueryAsync + |> Async.AwaitTask + |> Async.Ignore + +let private updateInviteCount code count = + connStr + |> Sql.connect + |> Sql.parameters [ "count" , Sql.int count ; "code" , Sql.string code ] + |> Sql.query """ + "UPDATE invite SET count = @count WHERE code = @code" + """ + |> Sql.executeNonQueryAsync + |> Async.AwaitTask + |> Async.Ignore let private markInvitedAccepted did = connStr @@ -279,9 +288,12 @@ let private processNewUser (eventArgs : GuildMemberAddEventArgs) = for invite in guildInvites do let result = cachedInvites.TryFind(invite.Code) match result with - | Some (_,count) -> + | Some (inviterId,count) -> if invite.Uses > count then - do! addInvitedUser eventArgs.Member.Id invite.Code invite.Uses |> Async.Ignore + do! updateInviteCount invite.Code count + try + do! addInvitedUser eventArgs.Member.Id inviterId invite.Code invite.Uses |> Async.Ignore + with ex -> printfn $"Tried to add existing user {eventArgs.Member.Id}:{eventArgs.Member.Username} to invites: {ex.Message}" do! Analytics.invitedUserEntered invite.Code invite.Inviter.Id eventArgs.Member.Id invite.Inviter.Username eventArgs.Member.Username | None -> () } :> Task