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))
|
||||
stealBot.add_ComponentInteractionCreated(AsyncEventHandler(Thief.handleStealButton))
|
||||
inviterBot.add_GuildMemberAdded(AsyncEventHandler(InviteTracker.handleGuildMemberAdded))
|
||||
inviterBot.add_ComponentInteractionCreated(AsyncEventHandler(InviteTracker.handleWhitelist))
|
||||
inviterBot.add_ComponentInteractionCreated(AsyncEventHandler(InviteTracker.handleButtonEvent))
|
||||
//inviterBot.add_GuildMemberRemoved(AsyncEventHandler(InviteTracker.handleGuildMemberRemoved))
|
||||
|
||||
let asdf (_ : DiscordClient) (event : DSharpPlus.EventArgs.InteractionCreateEventArgs) =
|
||||
|
@ -122,54 +122,29 @@ let getInvitedUsers userId =
|
||||
|
||||
let createGuildInvite (ctx : IDiscordContext) showWhitelistReward =
|
||||
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 rewardMsg =
|
||||
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**."
|
||||
else
|
||||
$"**⏀ | 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`."
|
||||
let header =
|
||||
let embed =
|
||||
DiscordEmbedBuilder()
|
||||
.WithDescription(rewardMsg)
|
||||
.WithImageUrl("https://pbs.twimg.com/profile_banners/1449270642340089856/1640071520/1500x500")
|
||||
.WithTitle("Recruitment")
|
||||
|
||||
let msg =
|
||||
DiscordFollowupMessageBuilder()
|
||||
.AddEmbed(header.Build())
|
||||
let builder =
|
||||
DiscordInteractionResponseBuilder()
|
||||
.AddEmbed(embed)
|
||||
.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
|
||||
|
||||
let listServerInvites (ctx : IDiscordContext) = task {
|
||||
@ -246,13 +221,6 @@ let processNewUser (eventArgs : GuildMemberAddEventArgs) =
|
||||
| None -> ()
|
||||
} :> 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
|
||||
// rewarding GBT.
|
||||
//let handleGuildMemberRemoved _ (eventArgs : GuildMemberRemoveEventArgs) =
|
||||
@ -297,9 +265,8 @@ let tryGrantWhitelist (ctx : IDiscordContext) =
|
||||
return NotEnoughInvites total
|
||||
}
|
||||
|
||||
let handleWhitelist (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
||||
let handleWhitelist (ctx : IDiscordContext) =
|
||||
task {
|
||||
let ctx = DiscordEventContext event :> IDiscordContext
|
||||
let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
|
||||
match! tryGrantWhitelist ctx with
|
||||
| AlreadyWhitelisted ->
|
||||
@ -316,6 +283,51 @@ let handleWhitelist (_ : DiscordClient) (event : ComponentInteractionCreateEvent
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder)
|
||||
} :> 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() =
|
||||
inherit ApplicationCommandModule ()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user