Make the link appear with a button
This commit is contained in:
		
							parent
							
								
									69f68c10c4
								
							
						
					
					
						commit
						863e5e3768
					
				@ -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_ComponentInteractionCreated(AsyncEventHandler(InviteTracker.handleWhitelist))
 | 
					inviterBot.add_ComponentInteractionCreated(AsyncEventHandler(InviteTracker.handleButtonEvent))
 | 
				
			||||||
//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) =
 | 
				
			||||||
 | 
				
			|||||||
@ -122,54 +122,29 @@ let getInvitedUsers userId =
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
let createGuildInvite (ctx : IDiscordContext) showWhitelistReward =
 | 
					let createGuildInvite (ctx : IDiscordContext) showWhitelistReward =
 | 
				
			||||||
    task {
 | 
					    task {
 | 
				
			||||||
        let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
 | 
					 | 
				
			||||||
        do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let channel = ctx.GetGuild().Channels.[GuildEnvironment.channelWelcome]
 | 
					 | 
				
			||||||
        let! invite = channel.CreateInviteAsync(max_age = 0, unique = true)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // When a player generates an invite code but it hasn't expired, it generates the same code, creating a duplicate entry
 | 
					 | 
				
			||||||
        // so catch the exception thrown because the code column is unique
 | 
					 | 
				
			||||||
        try
 | 
					 | 
				
			||||||
            let! _ = createInvite (ctx.GetDiscordMember().Id) invite.Code
 | 
					 | 
				
			||||||
            return ()
 | 
					 | 
				
			||||||
        with ex ->
 | 
					 | 
				
			||||||
            printfn "%A" ex.Message
 | 
					 | 
				
			||||||
            ()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let invitesRequired = 5
 | 
					        let invitesRequired = 5
 | 
				
			||||||
        let rewardMsg =
 | 
					        let rewardMsg =
 | 
				
			||||||
            if showWhitelistReward then
 | 
					            if showWhitelistReward then
 | 
				
			||||||
                $"**⏀ | Your Mission:**\nRecruit {invitesRequired} Degenz into Beautopia©.\n\n" +
 | 
					                $"**⏀ | Your Mission:**\nUse the link to **recruit** {invitesRequired} Degenz into Beautopia©.\n\n" +
 | 
				
			||||||
                $"**⌼ | Your Reward:**\nGet awarded **Whitelist**."
 | 
					                $"**⌼ | Your Reward:**\nGet awarded **Whitelist**."
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                $"**⏀ | Your Mission:**\nCopy the link & share it with Degenz you want to `/recruit`.\n\n" +
 | 
					                $"**⏀ | Your Mission:**\nCopy the link & share it with Degenz you want to `/recruit`.\n\n" +
 | 
				
			||||||
                $"**⌼ | Your Reward:**\n`Earn {InviteRewardAmount} $GBT` 💰 for every Degen you've `/recruited`."
 | 
					                $"**⌼ | Your Reward:**\n`Earn {InviteRewardAmount} $GBT` 💰 for every Degen you've `/recruited`."
 | 
				
			||||||
        let header =
 | 
					        let embed =
 | 
				
			||||||
            DiscordEmbedBuilder()
 | 
					            DiscordEmbedBuilder()
 | 
				
			||||||
                .WithDescription(rewardMsg)
 | 
					                .WithDescription(rewardMsg)
 | 
				
			||||||
                .WithImageUrl("https://pbs.twimg.com/profile_banners/1449270642340089856/1640071520/1500x500")
 | 
					                .WithImageUrl("https://pbs.twimg.com/profile_banners/1449270642340089856/1640071520/1500x500")
 | 
				
			||||||
                .WithTitle("Recruitment")
 | 
					                .WithTitle("Recruitment")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let msg =
 | 
					        let builder =
 | 
				
			||||||
            DiscordFollowupMessageBuilder()
 | 
					            DiscordInteractionResponseBuilder()
 | 
				
			||||||
                .AddEmbed(header.Build())
 | 
					                .AddEmbed(embed)
 | 
				
			||||||
                .AsEphemeral(true)
 | 
					                .AsEphemeral(true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        do! ctx.FollowUp(msg)
 | 
					        let button = DiscordButtonComponent(ButtonStyle.Success, $"CreateGuildInvite", $"Give it to me") :> DiscordComponent
 | 
				
			||||||
 | 
					        builder.AddComponents [| button |] |> ignore
 | 
				
			||||||
 | 
					        do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let msg =
 | 
					 | 
				
			||||||
            DiscordFollowupMessageBuilder()
 | 
					 | 
				
			||||||
                .WithContent($"⬇️ COPY THE LINK BELOW ⬇")
 | 
					 | 
				
			||||||
                .AsEphemeral(true)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        do! ctx.FollowUp(msg)
 | 
					 | 
				
			||||||
        let msg =
 | 
					 | 
				
			||||||
            DiscordFollowupMessageBuilder()
 | 
					 | 
				
			||||||
                .WithContent($"https://discord.gg/{invite.Code}")
 | 
					 | 
				
			||||||
                .AsEphemeral(true)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        do! ctx.FollowUp(msg)
 | 
					 | 
				
			||||||
    } :> Task
 | 
					    } :> Task
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let listServerInvites (ctx : IDiscordContext) = task {
 | 
					let listServerInvites (ctx : IDiscordContext) = task {
 | 
				
			||||||
@ -246,13 +221,6 @@ let processNewUser (eventArgs : GuildMemberAddEventArgs) =
 | 
				
			|||||||
             | None -> ()
 | 
					             | None -> ()
 | 
				
			||||||
    } :> Task
 | 
					    } :> Task
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) =
 | 
					 | 
				
			||||||
    task {
 | 
					 | 
				
			||||||
        let! exists = checkUserInvited eventArgs.Member.Id
 | 
					 | 
				
			||||||
        if not exists then
 | 
					 | 
				
			||||||
            do! processNewUser eventArgs
 | 
					 | 
				
			||||||
    } :> 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
 | 
					// 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.
 | 
					// rewarding GBT.
 | 
				
			||||||
//let handleGuildMemberRemoved _ (eventArgs : GuildMemberRemoveEventArgs) =
 | 
					//let handleGuildMemberRemoved _ (eventArgs : GuildMemberRemoveEventArgs) =
 | 
				
			||||||
@ -297,9 +265,8 @@ let tryGrantWhitelist (ctx : IDiscordContext) =
 | 
				
			|||||||
                    return NotEnoughInvites total
 | 
					                    return NotEnoughInvites total
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let handleWhitelist (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
 | 
					let handleWhitelist (ctx : IDiscordContext) =
 | 
				
			||||||
    task {
 | 
					    task {
 | 
				
			||||||
        let ctx = DiscordEventContext event :> IDiscordContext
 | 
					 | 
				
			||||||
        let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
 | 
					        let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
 | 
				
			||||||
        match! tryGrantWhitelist ctx with
 | 
					        match! tryGrantWhitelist ctx with
 | 
				
			||||||
        | AlreadyWhitelisted ->
 | 
					        | AlreadyWhitelisted ->
 | 
				
			||||||
@ -316,6 +283,51 @@ let handleWhitelist (_ : DiscordClient) (event : ComponentInteractionCreateEvent
 | 
				
			|||||||
            do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder)
 | 
					            do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder)
 | 
				
			||||||
    } :> Task
 | 
					    } :> Task
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let handleCreateInvite (ctx : IDiscordContext) =
 | 
				
			||||||
 | 
					    task {
 | 
				
			||||||
 | 
					        let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
 | 
				
			||||||
 | 
					        do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let channel = ctx.GetGuild().Channels.[GuildEnvironment.channelWelcome]
 | 
				
			||||||
 | 
					        let! invite = channel.CreateInviteAsync(max_age = 0, unique = true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // When a player generates an invite code but it hasn't expired, it generates the same code, creating a duplicate entry
 | 
				
			||||||
 | 
					        // so catch the exception thrown because the code column is unique
 | 
				
			||||||
 | 
					        try
 | 
				
			||||||
 | 
					            let! _ = createInvite (ctx.GetDiscordMember().Id) invite.Code
 | 
				
			||||||
 | 
					            return ()
 | 
				
			||||||
 | 
					        with ex ->
 | 
				
			||||||
 | 
					            printfn "%A" ex.Message
 | 
				
			||||||
 | 
					            ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let msg =
 | 
				
			||||||
 | 
					            DiscordFollowupMessageBuilder()
 | 
				
			||||||
 | 
					                .WithContent($"https://discord.gg/{invite.Code}")
 | 
				
			||||||
 | 
					                .AsEphemeral(true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        do! ctx.FollowUp(msg)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let handleButtonEvent  (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
 | 
				
			||||||
 | 
					    let eventCtx = DiscordEventContext event :> IDiscordContext
 | 
				
			||||||
 | 
					    match event.Id with
 | 
				
			||||||
 | 
					    | id when id.StartsWith("GimmeWhitelist")  -> handleWhitelist eventCtx
 | 
				
			||||||
 | 
					    | id when id.StartsWith("CreateGuildInvite")  -> handleCreateInvite eventCtx
 | 
				
			||||||
 | 
					    | _ ->
 | 
				
			||||||
 | 
					        task {
 | 
				
			||||||
 | 
					            let builder = DiscordInteractionResponseBuilder()
 | 
				
			||||||
 | 
					            builder.IsEphemeral <- true
 | 
				
			||||||
 | 
					            builder.Content <- $"Incorrect Action identifier {eventCtx.GetInteractionId()}"
 | 
				
			||||||
 | 
					            do! eventCtx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) =
 | 
				
			||||||
 | 
					    task {
 | 
				
			||||||
 | 
					        let! exists = checkUserInvited eventArgs.Member.Id
 | 
				
			||||||
 | 
					        if not exists then
 | 
				
			||||||
 | 
					            do! processNewUser eventArgs
 | 
				
			||||||
 | 
					    } :> Task
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Inviter() =
 | 
					type Inviter() =
 | 
				
			||||||
    inherit ApplicationCommandModule ()
 | 
					    inherit ApplicationCommandModule ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user