From 11fd4a45e603d0b688b917e7431870afefe7b3ab Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Mon, 23 May 2022 23:16:05 +0700 Subject: [PATCH] Grant roles --- Bot/GuildEnvironment.fs | 2 ++ Bot/InviteTracker.fs | 37 ++++++++++++++++++++++++++++++++++--- Bot/Whitelist.fs | 5 +++-- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/Bot/GuildEnvironment.fs b/Bot/GuildEnvironment.fs index 9f755bc..614cb33 100644 --- a/Bot/GuildEnvironment.fs +++ b/Bot/GuildEnvironment.fs @@ -54,6 +54,8 @@ let botIdArmory = getId "BOT_ARMORY" let roleTrainee = getId "ROLE_TRAINEE" let roleHacker = getId "ROLE_HACKER" let rolePrisoner = getId "ROLE_PRISONER" +let roleWhitelistPending = getId "ROLE_WHITELIST_PENDING" +let roleWhiteOGPending = getId "ROLE_WHITEOG_PENDING" let roleWhitelist = getId "ROLE_WHITELIST" let roleWhiteOG = getId "ROLE_WHITEOG" let roleAdmin = getId "ROLE_ADMIN" diff --git a/Bot/InviteTracker.fs b/Bot/InviteTracker.fs index c228d81..2f44d41 100644 --- a/Bot/InviteTracker.fs +++ b/Bot/InviteTracker.fs @@ -201,6 +201,20 @@ let getWalletAddress (userId : uint64) = |> Sql.executeRowAsync (fun reader -> reader.stringOrNone "wallet_address") |> Async.AwaitTask +let walletAddressExists (address : string) = + async { + let! result = + connStr + |> Sql.connect + |> Sql.parameters [ "address" , Sql.string address ] + |> Sql.query """ + SELECT wallet_address FROM "user" WHERE wallet_address = @address; + """ + |> Sql.executeAsync (fun reader -> reader.stringOrNone "wallet_address") + |> Async.AwaitTask + return List.isEmpty result |> not + } + let private listServerInvites (ctx : IDiscordContext) = task { let! invites = ctx.GetGuild().GetInvitesAsync() let sb = StringBuilder() @@ -451,7 +465,7 @@ let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) = do! processNewUser eventArgs } :> Task -let submitWhitelist (address : string) (ctx : IDiscordContext) = +let submitAddress (address : string) (ctx : IDiscordContext) = PlayerInteractions.executePlayerAction ctx (fun player -> async { let pubkey = PublicKey(address) try @@ -463,6 +477,20 @@ let submitWhitelist (address : string) (ctx : IDiscordContext) = | Some _ -> "We successfully updated your wallet address:" | None -> "We have successfully received your wallet address" do! addWalletAddress (ctx.GetDiscordMember().Id) address + + let user = ctx.GetDiscordMember() + if ctx.GetDiscordMember().Roles |> Seq.exists (fun role -> role.Id = GuildEnvironment.roleWhitelistPending) then + let role = ctx.GetGuild().GetRole(GuildEnvironment.roleWhitelist) + do! user.GrantRoleAsync(role) |> Async.AwaitTask + let role = ctx.GetGuild().GetRole(GuildEnvironment.roleWhitelistPending) + do! user.RevokeRoleAsync(role) |> Async.AwaitTask + if ctx.GetDiscordMember().Roles |> Seq.exists (fun role -> role.Id = GuildEnvironment.roleWhiteOGPending) then + let role = ctx.GetGuild().GetRole(GuildEnvironment.roleWhiteOG) + do! user.GrantRoleAsync(role) |> Async.AwaitTask + let role = ctx.GetGuild().GetRole(GuildEnvironment.roleWhiteOGPending) + do! user.RevokeRoleAsync(role) |> Async.AwaitTask + + do! Messaging.sendFollowUpMessage ctx $""" 🚀 __Mint Date:__ 31st May 18:00 UTC ✅ {msg} {address} @@ -498,8 +526,11 @@ type Inviter() = [] member this.SubmitAddress (ctx : InteractionContext, [] address : string) = - if ctx.Member.Roles |> Seq.exists (fun role -> role.Id = GuildEnvironment.roleWhitelist || role.Id = GuildEnvironment.roleWhiteOG) then - enforceChannel (DiscordInteractionContext ctx) (submitWhitelist address) + let isWhitelist (role : DiscordRole) = + role.Id = GuildEnvironment.roleWhitelistPending || role.Id = GuildEnvironment.roleWhiteOGPending || + role.Id = GuildEnvironment.roleWhitelist || role.Id = GuildEnvironment.roleWhiteOG + if ctx.Member.Roles |> Seq.exists isWhitelist then + enforceChannel (DiscordInteractionContext ctx) (submitAddress address) else let msg = $"You currently are not Whitelisted, go to <#{GuildEnvironment.channelWhitelist}> to purchase the role!" Messaging.sendSimpleResponse (DiscordInteractionContext ctx) msg diff --git a/Bot/Whitelist.fs b/Bot/Whitelist.fs index f5ff021..6d98e51 100644 --- a/Bot/Whitelist.fs +++ b/Bot/Whitelist.fs @@ -44,9 +44,10 @@ You need to **BUY** Whitelist with 💰 $GBT... let grantWhitelistRole isOg (ctx : IDiscordContext) = task { - let roleId = if isOg then GuildEnvironment.roleWhiteOG else GuildEnvironment.roleWhitelist + let roleId = if isOg then GuildEnvironment.roleWhiteOGPending else GuildEnvironment.roleWhitelistPending let role = ctx.GetGuild().GetRole(roleId) - do! ctx.GetDiscordMember().GrantRoleAsync(role) + let user = ctx.GetDiscordMember() + do! user.GrantRoleAsync(role) } :> Task let handleButtonEvent _ (event : ComponentInteractionCreateEventArgs) =