Several improvements to invite and whitelist
This commit is contained in:
		
							parent
							
								
									a8ab4a6abd
								
							
						
					
					
						commit
						58ac186a0a
					
				@ -166,31 +166,42 @@ let private getInvitedUsers userId =
 | 
			
		||||
    |> Sql.executeAsync (fun read -> read.string "discord_id" |> uint64)
 | 
			
		||||
    |> Async.AwaitTask
 | 
			
		||||
 | 
			
		||||
let private createGuildInvite (ctx : IDiscordContext) showWhitelistReward =
 | 
			
		||||
let guildInviteEmbed showWhitelistReward =
 | 
			
		||||
    let rewardMsg =
 | 
			
		||||
        if showWhitelistReward then
 | 
			
		||||
            $"**⏀ | Your Mission:**\nUse the link to **recruit** Degenz into Beautopia©.\n\n" +
 | 
			
		||||
            $"**⌼ | Your Reward:**\nGet awarded **Whitelist**."
 | 
			
		||||
        else
 | 
			
		||||
            $"**⏀ | Your Mission:**\nUse the link to share it with Degenz you want to `/recruit`.\n\n" +
 | 
			
		||||
            $"**⌼ | Your Reward:**\n`Earn {InviteRewardAmount} $GBT` 💰 for every Degen you've `/recruited`."
 | 
			
		||||
    let embed =
 | 
			
		||||
        DiscordEmbedBuilder()
 | 
			
		||||
            .WithDescription(rewardMsg)
 | 
			
		||||
            .WithImageUrl("https://pbs.twimg.com/profile_banners/1449270642340089856/1640071520/1500x500")
 | 
			
		||||
            .WithTitle("Recruitment")
 | 
			
		||||
 | 
			
		||||
    let builder =
 | 
			
		||||
        DiscordFollowupMessageBuilder()
 | 
			
		||||
            .AddEmbed(embed)
 | 
			
		||||
            .AsEphemeral(true)
 | 
			
		||||
 | 
			
		||||
    let button = DiscordButtonComponent(ButtonStyle.Success, $"CreateGuildInvite", $"Give it to me") :> DiscordComponent
 | 
			
		||||
    builder.AddComponents [| button |]
 | 
			
		||||
 | 
			
		||||
let private showInviteMessage (ctx : IDiscordContext) showWhitelistReward =
 | 
			
		||||
    task {
 | 
			
		||||
        let invitesRequired = 5
 | 
			
		||||
        let rewardMsg =
 | 
			
		||||
            if showWhitelistReward then
 | 
			
		||||
                $"**⏀ | Your Mission:**\nUse the link to **recruit** {invitesRequired} Degenz into Beautopia©.\n\n" +
 | 
			
		||||
                $"**⌼ | Your Reward:**\nGet awarded **Whitelist**."
 | 
			
		||||
            else
 | 
			
		||||
                $"**⏀ | Your Mission:**\nUse the link to share it with Degenz you want to `/recruit`.\n\n" +
 | 
			
		||||
                $"**⌼ | Your Reward:**\n`Earn {InviteRewardAmount} $GBT` 💰 for every Degen you've `/recruited`."
 | 
			
		||||
        let embed =
 | 
			
		||||
            DiscordEmbedBuilder()
 | 
			
		||||
                .WithDescription(rewardMsg)
 | 
			
		||||
                .WithImageUrl("https://pbs.twimg.com/profile_banners/1449270642340089856/1640071520/1500x500")
 | 
			
		||||
                .WithTitle("Recruitment")
 | 
			
		||||
 | 
			
		||||
        let builder =
 | 
			
		||||
            DiscordInteractionResponseBuilder()
 | 
			
		||||
                .AddEmbed(embed)
 | 
			
		||||
                .AsEphemeral(true)
 | 
			
		||||
 | 
			
		||||
        let button = DiscordButtonComponent(ButtonStyle.Success, $"CreateGuildInvite", $"Give it to me") :> DiscordComponent
 | 
			
		||||
        builder.AddComponents [| button |] |> ignore
 | 
			
		||||
        do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder)
 | 
			
		||||
        let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
 | 
			
		||||
        do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder)
 | 
			
		||||
 | 
			
		||||
        match! DbService.tryFindPlayer (ctx.GetDiscordMember().Id) with
 | 
			
		||||
        | Some player ->
 | 
			
		||||
            let ( result , hackerRole ) = ctx.GetGuild().Roles.TryGetValue(GuildEnvironment.roleHacker)
 | 
			
		||||
            match player.Active , result && Seq.contains hackerRole (ctx.GetDiscordMember().Roles) with
 | 
			
		||||
            | true , true -> do! ctx.FollowUp(guildInviteEmbed showWhitelistReward)
 | 
			
		||||
            | false , _   -> do! sendFollowUpMessage ctx $"You're not in the game! Go to <#{GuildEnvironment.channelShelters}> NOW to get assigned a private bunk, and **JOIN THE GAME!**"
 | 
			
		||||
            | _ , false   -> do! sendFollowUpMessage ctx $"You still haven't completed training! Go to <#{GuildEnvironment.channelTraining}> NOW to become a **HACKER**!"
 | 
			
		||||
        | None ->
 | 
			
		||||
            do! sendFollowUpMessage ctx $"You're not in the game! Go to <#{GuildEnvironment.channelShelters}> NOW to get assigned a private bunk, and **JOIN THE GAME!**"
 | 
			
		||||
    } :> Task
 | 
			
		||||
 | 
			
		||||
let private listServerInvites (ctx : IDiscordContext) = task {
 | 
			
		||||
@ -330,14 +341,13 @@ let tryGrantWhitelist (ctx : IDiscordContext) =
 | 
			
		||||
        match! DbService.tryFindPlayer user.Id with
 | 
			
		||||
        | Some player ->
 | 
			
		||||
            let role = ctx.GetGuild().GetRole(GuildEnvironment.roleWhitelist)
 | 
			
		||||
            if player.Active then
 | 
			
		||||
                if Seq.contains role user.Roles then
 | 
			
		||||
                    return AlreadyWhitelisted
 | 
			
		||||
            if Seq.contains role user.Roles then
 | 
			
		||||
                return AlreadyWhitelisted
 | 
			
		||||
            elif player.Active then
 | 
			
		||||
                if int player.Bank >= WhitelistPrice then
 | 
			
		||||
                    return Granted player
 | 
			
		||||
                else
 | 
			
		||||
                    if int player.Bank >= WhitelistPrice then
 | 
			
		||||
                        return Granted player
 | 
			
		||||
                    else
 | 
			
		||||
                        return NotEnoughGBT (int player.Bank)
 | 
			
		||||
                    return NotEnoughGBT (int player.Bank)
 | 
			
		||||
            else
 | 
			
		||||
                return NotInGame
 | 
			
		||||
        | None -> return NotInGame
 | 
			
		||||
@ -365,6 +375,7 @@ Go to <#{GuildEnvironment.channelShelters}> NOW to get assigned a private bunk,
 | 
			
		||||
Come hang with all the other VIP Degenz in the <#{GuildEnvironment.channelElite}>
 | 
			
		||||
"""
 | 
			
		||||
        | NotEnoughGBT total ->
 | 
			
		||||
            builder.AddComponents([ DiscordButtonComponent(ButtonStyle.Success, $"BuyWhitelist", $"Buy Now", true) :> DiscordComponent ]) |> ignore
 | 
			
		||||
            builder.Content <- $"""
 | 
			
		||||
You don't have enough **$GBT** to buy a WHITELIST spot!
 | 
			
		||||
 | 
			
		||||
@ -381,8 +392,7 @@ Go earn more $GBT, and come back when you have `{WhitelistPrice} $GBT`!
 | 
			
		||||
Good luck Degen ✊
 | 
			
		||||
"""
 | 
			
		||||
        | Granted _ ->
 | 
			
		||||
            let button = DiscordButtonComponent(ButtonStyle.Success, $"BuyWhitelist", $"Buy Now") :> DiscordComponent
 | 
			
		||||
            builder.AddComponents([ button ]) |> ignore
 | 
			
		||||
            builder.AddComponents([ DiscordButtonComponent(ButtonStyle.Success, $"BuyWhitelist", $"Buy Now") :> DiscordComponent ]) |> ignore
 | 
			
		||||
            builder.Content <- """
 | 
			
		||||
Look at you Degen, you played Big Brother’s games and made it out alive!
 | 
			
		||||
 | 
			
		||||
@ -479,7 +489,7 @@ type Inviter() =
 | 
			
		||||
 | 
			
		||||
    [<SlashCommand("recruit", "Recruit another user to this discord and earn rewards")>]
 | 
			
		||||
    member this.CreateInvite (ctx : InteractionContext) =
 | 
			
		||||
        createGuildInvite (DiscordInteractionContext ctx) false
 | 
			
		||||
        showInviteMessage (DiscordInteractionContext ctx) false
 | 
			
		||||
 | 
			
		||||
    [<SlashCommand("recruited", "Get total invites from a specific user")>]
 | 
			
		||||
    member this.ListInvitedPeople (ctx : InteractionContext) =
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user