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